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
运行,但它仍然显示为同步。
答案 0 :(得分:1)
This snippet是一个很好的起点。
您还应该查看Celery或RQ,它们是用于大型项目的正确选项,更重要的是它们不是特定于Flask的。
他们还分别对Flask进行了整合,Flask-Celery和Flask-RQ。
答案 1 :(得分:1)
我相信你在问一些叫做“流媒体”的事情。对于Flask,可以使用生成器函数和yield
关键字来完成。
Flask官方文档中详细介绍了流媒体,看看here。