Python restfulapi结构

Python restfulapi结构,python,rest,flask,Python,Rest,Flask,我试图用flask创建一个简单的RESTful风格api。我想向服务器发送一些数据,让服务器在返回输出之前通过两个模型并行运行数据 我的问题如下。我想并行地通过两个模型传递数据,所以我假设我需要多处理。此外,我不希望每次调用api时都加载模型,因此我希望提前预加载模型。你知道如何最好地组织这个吗?下面是我的api代码片段示例 from flask import Flask, request app = Flask(__name__) @app.route('/api', methods =

我试图用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()
基本上我的问题归结为

  • 如何通过2个模型并行发送数据(例如,采用多处理或其他方式)

  • 我如何提前预加载模型,这样就不必在每次调用
    api\u message()
    时都对模型进行设置,因为这会带来很大的开销


  • 我是新来的烧瓶,所以任何建议都非常感谢,谢谢

    好的,看起来加载模型所需要做的就是在flask应用程序中实例化它们。然后,如果您打算用于处理(预加载)模型的模块被称为“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()
    

    我希望返回一个只包含415的字符串与使用该代码的实际响应不同;你测试过这个吗?我知道不是。这只是一段代码片段。我的实际问题更多地涉及如何在中并行运行2个模型,并在调用方法之前加载它们。如果您控制服务器实例,则可以使用实例加载模型。另外,如果您只想并行运行模型,是否需要并行发送数据?你能让一个等待另一个,并且只在它们都收到数据时运行它们吗?@postoronnim我确实控制了实例。基本上我不想运行模型1,然后运行模型2,因为它会很慢。每个模块都有相同的数据输入,所以我宁愿将其发送到模型1和模型2,然后在两个模块完成后发送输出。我如何构造它?因此,如果是相同的数据,发送一次,然后您可以使用多处理并行运行这两个模型。我是否需要在
    @app.route
    下使用单独的函数?