【问题标题】:How to make flask response to client asynchronously?如何使烧瓶异步响应客户端?
【发布时间】:2013-09-29 07:54:08
【问题描述】:

Flask 是一个单线程 Web 服务器。但是我想让它在处理一些耗时的请求时不会阻塞。

例如:

from flask import Flask
import time
import sys
app = Flask(__name__)

@app.route("/")
def hello():
    print "request"
    sys.stdout.flush()
    for _ in range(10000000):
        for j in range(10000000):
            i = 1
    return "Hello World!"

if __name__ == "__main__":
    app.run(debug=True)

我希望当每个客户端请求服务器时,它总是立即在控制台上输出“请求”。我尝试了gunicorn 并使用gunicorn -k gevent -w 4 a:app 运行,但它仍然显示为同步的。

【问题讨论】:

标签: python flask gunicorn


【解决方案1】:

This snippet 是一个很好的起点。

您还应该查看 CeleryRQ,它们适合用于大型项目,更重要的是它们不是特定于 Flask 的。

他们还各自集成了 Flask,Flask-CeleryFlask-RQ

【讨论】:

  • 来自 Flask-Celery 页面:«从 CELERY 3.0 开始,这个库不再是必需的,您应该使用标准的芹菜 API»。您也可以查看this post 了解有关 Flask 和 Celery 的详细信息。
【解决方案2】:

我相信您问的是所谓的“流媒体”。对于 Flask,这可以使用生成器函数和 yield 关键字来完成。

Flask 官方文档中更详细地介绍了流式传输,请查看 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-02
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多