如何异步地对客户端进行烧瓶响应?

时间:2013-09-24 07:50:15

标签: python flask gunicorn

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)

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

2 个答案:

答案 0 :(得分:1)

This snippet是一个很好的起点。

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

他们还分别对Flask进行了整合,Flask-CeleryFlask-RQ

答案 1 :(得分:1)

我相信你在问一些叫做“流媒体”的事情。对于Flask,可以使用生成器函数和yield关键字来完成。

Flask官方文档中详细介绍了流媒体,看看here