Я создаю веб-сайт, и при запуске я хочу запустить другой процесс, который начинает загрузку модели встраивания, потому что это занимает много времени и в конечном итоге понадобится пользователю. Это мой код:
from flask import Flask, render_template
from flask_socketio import SocketIO, send
import bot
import sys
sys.path = sys.path + ['filepath']
from BigLearnPy import BigLearn
from multiprocessing import Process
app = Flask(__name__)
app.config['SECRET_KEY'] = 'password'
socketio = SocketIO(app)
def loadModel():
BigLearn.LoadEmbeddingEngine()
emb = BigLearn.EmbeddingEngine('filepath')
@app.route('/')
def index():
return render_template('index.html')
@socketio.on('message')
def handleMessage(msg):
send(msg, broadcast=True)
p1.join()
send('0' + bot.getResponse(msg, emb), broadcast=True)
send('2' + bot.getKB(msg, emb), broadcast=True)
if __name__ == '__main__':
emb = None
p1 = Process(target=loadModel)
p1.start()
socketio.run(app)
Я запускаю процесс загрузки модели прямо перед запуском приложения (предпоследняя строка). Я присоединяюсь к процессу в функции handleMessage прямо перед тем, как мне нужно значение emb
. Так что я могу получить доступ к emb
вне функции loadModel, я объявил это прямо перед созданием процесса. Однако, когда я запускаю код, я получаю сообщение о том, что emb
- это объект NoneType. Это похоже на проблему с областью видимости, но независимо от того, где я говорю emb = None
, я получаю, что emb - это None или undefined, когда я пытаюсь его использовать. Как я могу загрузить модель в другой процесс, чем получить доступ к модели? Спасибо.