我试图用烧瓶创建一个简单的RESTful样式api。我想向服务器发送一些数据,让服务器在返回输出之前通过我并行的两个模型运行数据。
我的问题如下。我想通过两个模型并行传递数据,所以我假设我需要多处理。另外,我不想在每次调用api时加载模型,所以我想提前预加载模型。知道如何最好地构建这个吗?我的api代码段示例位于
之下from flask import Flask, request
app = Flask(__name__)
@app.route('/api', methods = ['POST'])
def api_message():
if request.headers['Content-Type'] == 'application/octet-stream':
data = request.data
#process data in parallel with preloaded models
return "result"
else:
#return error code
if __name__ == '__main__':
app.run()
基本上我的问题归结为
如何通过2个模型并行发送数据(例如,使用多处理或其他)
我如何提前预加载模型,因此每次调用api_message()
时都不需要设置模型,因为这会产生大量开销。
我是Flask的新手所以非常感谢任何建议,谢谢!
答案 0 :(得分:2)
好的,看起来你需要加载你的模型就是在你的烧瓶应用程序中实例化它们。然后,如果您打算用来处理(预加载)模型的模块被称为" process_data"这些模型被称为" Model1"和" Model2"然后你的代码,我稍微修改并添加了多处理,看起来像这样:
from flask import Flask, request
import multiprocessing
import process_data
from models import Model1, Model2
model1 = Model1()
model2 = Model2()
app = Flask(__name__)
models = [model1, model2]
@app.route('/api', methods = ['POST'])
def process_in_parallel():
if request.headers['Content-Type'] == 'application/octet-stream':
data = request.data
else:
#return error code
def worker(model, data):
process_data(model, data)
return
jobs = []
for model in models:
p = multiprocessing.Process(target=worker(model, data))
jobs.append(p)
p.start()
if __name__ == '__main__':
app.run()