2013-02-20 44 views
4

我有这个简单的瓶/ 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() 

当我运行它并在浏览器中打开多个URL时,除了其中一个阻塞之外,我究竟做错了什么?

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

+0

这些应该是编辑,而不是评论。 – Linuxios 2013-02-21 01:15:30

回答

5

浏览器中的多个选项卡将被阻止。这并不意味着gevent/gunicorn不会同时运行这些请求。我尝试使用并发curl请求和XmlHttpRequest - 它按预期工作。另请注意,curl缓冲区输出。 “\ r \ n”是必需的,以便逐行打印。

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

+2

为什么它不适用于浏览器中的多个选项卡? – 2014-10-18 02:31:39