【发布时间】:2015-06-29 07:54:58
【问题描述】:
我在 python 中有一个应用程序需要很长时间来计算。我需要创建 REST 端点。我使用 Flask 创建它。但是我需要服务器立即响应请求已被接受。如何做吗?
【问题讨论】:
标签: python-2.7 flask
我在 python 中有一个应用程序需要很长时间来计算。我需要创建 REST 端点。我使用 Flask 创建它。但是我需要服务器立即响应请求已被接受。如何做吗?
【问题讨论】:
标签: python-2.7 flask
假设您不希望在请求的响应正文中出现繁重计算的结果。您仍然可以在视图中生成一个线程并返回 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)
【讨论】: