简体   繁体   English

Flask RESTful API结构

[英]Flask RESTful API structure

I'm attempting to create a simple RESTful style api with flask. 我正在尝试使用flask创建一个简单的RESTful风格api。 I want to send the server some data, have the server run the data through two models I have in parallel before returning an output. 我想向服务器发送一些数据,让服务器在返回输出之前通过我具有的两个模型并行运行数据。

My question is the following. 我的问题如下。 I Would like to pass the data through two models in parallel, so I'm assuming I will need multiprocessing. 我想并行地通过两个模型传递数据,所以我假设我将需要多处理。 Additionally, I would not like to load the models each time the api is being called, so I would like to preload the models in advance. 另外,我不想每次调用api时都加载模型,所以我想提前预加载模型。 Any idea of how to best structure this? 关于如何最好地构造这个的任何想法? My api code snippet sample is below 我的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()

Essentially my question boils down to 本质上我的问题可以归结为

  1. How can send the data through 2 models in parallel (eg with multiprocessing or whatever) 如何通过两个模型并行发送数据(例如,使用多处理或其他方法)

  2. How can I preload the models in advance so they do not have to be set up each time api_message() is called, as that would be a lot of overhead. 我如何预先预加载模型,这样就不必在每次调用api_message()时都进行设置,因为这会产生很多开销。

I am new to Flask so any advice is much appreciated, thanks! 我是Flask的新手,因此非常感谢任何建议,谢谢!

OK, it looks like all you need to do load your models is to instantiate them in your flask application. 好的,看起来您需要加载的所有模型都是在flask应用程序中实例化它们。 Then, if the module you intend to use to work on your (preloaded) models were called "process_data" and the models were called "Model1" and "Model2", then your code, which I modified slightly and added multiprocessing, would look like this: 然后,如果您打算将用于(预加载的)模型的模块称为“ 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()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM