简单的flask / gevent请求不会同时运行

时间:2013-02-20 20:07:50

标签: python flask gevent

我有这个简单的烧瓶/ gevent演示代码。

#!/usr/bin/env python
import gevent
from gevent.pywsgi import WSGIServer
from gevent import monkey
monkey.patch_socket()

from flask import Flask, Response

app = Flask(__name__)

@app.route('/')
def stream():
    def gen():
        for i in range(10):
            yield "data: %d\r\n" % i
            gevent.sleep(1)
    return Response(gen())

if __name__ == '__main__':
    http = WSGIServer(('', 5000), app)
    http.serve_forever()

当我运行它并在浏览器中打开多个网址时,除了其中一个网格之外的所有网址都会阻止。我做错了什么?

我尝试使用monkey.patch_all()运行它,并使用gunicorn streaming:app -k gevent运行它 - 它仍然在浏览器中阻止。

1 个答案:

答案 0 :(得分:4)

浏览器中的多个标签会阻止。这并不意味着gevent / gunicorn没有同时运行请求。我尝试使用并发curl请求和XmlHttpRequest - 它按预期工作。另请注意curl缓冲输出。需要“\ r \ n”才能逐行打印。

旁注:感谢#pocoo上的mitsuhiko解决它。如果你没有试过烧瓶,你应该。 mitushiko和烧瓶都很棒。