python - 在 Flask 应用程序中将初始化任务置于后台
问题描述
我正在从事一个数据科学项目,我需要在该项目中训练机器学习模型并提供一个 API 来访问模型对测试数据的预测。
到目前为止,我已经运行了所有东西,使用 Flask 提供一个 HTML 页面,其中包含对传递给它的测试数据的模型预测。我希望这个启动得更好。训练模型需要大量时间,并且 Flask 应用程序只是在之后才启动,这意味着在训练模型之前无法访问我的 API。到目前为止的启动顺序如下:
Read training database
Train model
Start Flask app
我想将此订单更改为
Start Flask app
Read training database
Train model
然后,当我localhost/?input=<xxx>
在模型训练之前访问时,我想显示一条消息,例如“模型正在训练”。
我想我需要某种并行处理方案,我已经查看了多处理模块,但我不确定最好的方法。特别是,我如何model
从后台进程中获取(参考)受过训练的人?鉴于p.join()
我的代码结构如下:
import flask
from multiprocessing import Process
...
def get_trained_model():
model = expensiveComputation()
return model # I don't thing "return" is the right way to go??
if __name__ == '__main__':
p = Process(target=get_trained_model)
p.start()
app = flask.Flask(__name__)
@app.route('/', methods=['GET'])
def home():
if some_flag_that_model_ready:
model = somehow_get_model_from_process()
model_response = model.predict(method_to_get_test_data()).toString()
return model_response
else:
return "model is still being trained"
app.run()
这可以通过简单的方式完成,而不使用 RQ 或 Celery 等外部工具吗?这是正确的方法吗?
解决方案
推荐阅读
- c++ - 分配给数组时出现分段错误?HackerRank 2D 数组 - DS
- sql-server - 保持表同步
- .net-core - HttpcontextAccess.HttpContext.User 值在 RedirectToAction 上重置
- react-router - 在 Next.js 环境中使用 react-router
- java - 如何模拟类型转换的方法?
- unity3d - 在 Unity 编辑器中使用脚本更改动作
- sql - 优化视图SQL查询
- c# - 无法解析“Swashbuckle.AspNetCore.Swagger.ISwaggerProvider”类型的服务
- regex - 正则表达式将组加入另一个
- javascript - Angular 6 bootstrap 多选项目单击触发两次