FLASK: выполняется ли код вне маршрутизаторов каждый раз, когда поступает новый запрос? - PullRequest
0 голосов
/ 14 сентября 2018

Ниже приведено базовое приложение фляги:

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, поскольку он содержит только один поток.Так что, если сервер развертывания порождает поток для каждого запроса, будет ли загрузка модели происходить каждый раз?

1 Ответ

0 голосов
/ 14 сентября 2018

Ваш код является обычным кодом Python. Когда вы запускаете приложение, происходит следующее: ваш Python WSGI HTTP-сервер (существует множество WSGI-серверов, таких как gunicorn ), загружает этот сценарий и проверяет минимальные требования для WSGI-серверов (о которых заботится колба). Смотрите здесь для деталей. Этот сервер может запустить несколько экземпляров этого скрипта для повышения производительности, тогда ваша модель будет загружена несколько раз.

Тогда, когда выполняется запрос, сервер уравновешивает этот запрос в одном из ранее запущенных процессов и напрямую обращается к объекту фляги (поэтому он не перезагружает код). Однако некоторые серверы могут адаптировать количество процессов в зависимости от количества запросов, и ваша модель будет перезагружена.

...