Flask RESTful API结构

时间:2017-01-27 19:56:30

标签: python rest flask

我试图用烧瓶创建一个简单的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()

基本上我的问题归结为

  1. 如何通过2个模型并行发送数据(例如,使用多处理或其他)

  2. 我如何提前预加载模型,因此每次调用api_message()时都不需要设置模型,因为这会产生大量开销。

  3. 我是Flask的新手所以非常感谢任何建议,谢谢!

1 个答案:

答案 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()