Столкнулся с проблемой в работе с Flask и Tensorflow в REST API сервисе.
Дано:
Допустим имеется вебсервис, написанный с помощью Flask, который сервится на UWSGI. Также сервис использует керас модель на основе Tensorflow backend.
В сервисе есть глобальная переменная(инициализированная модель), которая должна инициализироваться при запуске воркера.
Проблематика: Проблема в том, что инициализация модели должна происходить при старте каждого сервиса. К примеру, в файле wsgi.py после импорта приложения, мы инициализируем модель вот таким способом:
from web.app import application
from keras_backend import KerasModel
application.keras_model = KerasModel(model_path='models/keras-weights.hdf5')
В таком подходе, инициализация модели происходит единожды при старте самого первого воркера. И соответственно хранится только там.
На конфиге ювзги с одним потоком и одним процессом все работает. Если сделать значение опции workers(они же processes) больше 1 или добавить опцию master=true/py-autoreload=true - то только в одном процессе будет храниться модель, когда запрос будет исполняться любым другим воркером uwsgi, то будет выстреливать harakiri по таймауту.
Вопрос: Как сделать так, чтобы инициализация модели происходила при спавне каждого воркера UWSGI отдельно?(Текущий ини файл с конфигом для одного воркера и одного потока, на котором все работает, прикрепляю ниже.)
[uwsgi]
socket = 0.0.0.0:8000
protocol = http
chdir = /opt/project
module = wsgi:application
threads = 1
workers = 1
listen = 128
harakiri = 60
single-interpreter = true