【问题标题】:Python Flask Immediate ResponsePython Flask 立即响应
【发布时间】:2015-06-29 07:54:58
【问题描述】:

我在 python 中有一个应用程序需要很长时间来计算。我需要创建 REST 端点。我使用 Flask 创建它。但是我需要服务器立即响应请求已被接受。如何做吗?

【问题讨论】:

    标签: python-2.7 flask


    【解决方案1】:

    假设您不希望在请求的响应正文中出现繁重计算的结果。您仍然可以在视图中生成一个线程并返回 http 代码 202/Accepted,表示“请求已被接受处理,但处理尚未完成。”RFC-2616

    应该给出以下代码

    import httplib
    from threading import Thread
    
    from flask import Flask, Response
    
    from mymodule import heavy_lift
    
    app = Flask(__name__)
    
    @app.route("/async")
    def async_start():
        Thread(target=heavy_lift).start()
        return Response(status=httplib.ACCEPTED)
    
    if __name__ == "__main__":
        app.run()
    

    如果您想使用 Flask 执行繁重的异步任务,我建议使用分布式任务队列,例如 Celery,它对 Flask 非常友好(参见 Flask documentation

    【讨论】:

    • 将结果保存在某个地方,例如数据库。当用户向 /async 发出请求时,向他发送 202 并在正文中给他一个 id,他可以使用该 id 之后轮询另一个端点以获取作业的状态/结果(例如 /job/ /状态)。
    • 知道了。有没有人可以在不涉及数据库的情况下做到这一点
    猜你喜欢
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 2019-05-28
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多