FLASK:每次有新请求进入时,路由器外部的代码都会执行吗?
FLASK: Does the code outside the routers get executed every time a new request comes in?
以下是一个基本的 Flask 应用程序:
from flask import Flask, render_template, request
import pickle
import os
cur_dir = os.path.dirname(__file__)
clf = pickle.load(open(os.path.join(cur_dir, 'pkl_objects/classifier.pkl'), 'rb'))
@app.route('/')
def index():
return "RESPONSE"
现在我的问题是,模型是在每次向该服务器发出新请求时加载,还是只加载一次并且只为每个传入请求执行路由?使用一个简单的 Flask 开发服务器很难解决这个问题,因为它只包含一个线程。那么,如果部署服务器为每个请求生成一个线程,那么每次都会加载模型吗?
您的代码是常规 python 代码。当您启动应用程序时会发生什么是您的 Python WSGI HTTP 服务器(有很多 WSGI 服务器,例如 gunicorn) loads this script and verifies the minimal requirements for a WSGI Servers (which flask takes care of). See here 以获取详细信息。该服务器可能出于性能目的启动此脚本的多个实例,然后您的模型会加载几次。
那么当发出请求时发生的事情是服务器在先前启动的进程之一中平衡此请求并直接访问其中的 flask 对象(因此它不会重新加载代码)。但是,某些服务器可能会根据请求数量调整进程数量,并且您的模型将被重新加载。
以下是一个基本的 Flask 应用程序:
from flask import Flask, render_template, request
import pickle
import os
cur_dir = os.path.dirname(__file__)
clf = pickle.load(open(os.path.join(cur_dir, 'pkl_objects/classifier.pkl'), 'rb'))
@app.route('/')
def index():
return "RESPONSE"
现在我的问题是,模型是在每次向该服务器发出新请求时加载,还是只加载一次并且只为每个传入请求执行路由?使用一个简单的 Flask 开发服务器很难解决这个问题,因为它只包含一个线程。那么,如果部署服务器为每个请求生成一个线程,那么每次都会加载模型吗?
您的代码是常规 python 代码。当您启动应用程序时会发生什么是您的 Python WSGI HTTP 服务器(有很多 WSGI 服务器,例如 gunicorn) loads this script and verifies the minimal requirements for a WSGI Servers (which flask takes care of). See here 以获取详细信息。该服务器可能出于性能目的启动此脚本的多个实例,然后您的模型会加载几次。
那么当发出请求时发生的事情是服务器在先前启动的进程之一中平衡此请求并直接访问其中的 flask 对象(因此它不会重新加载代码)。但是,某些服务器可能会根据请求数量调整进程数量,并且您的模型将被重新加载。