2013-02-20 4 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

ответ

5

Несколько вкладок в браузерах будут блокироваться. Это не значит, что gevent/gunicorn не выполняет запросы одновременно. Я попробовал это с параллельными запросами curl и XmlHttpRequest - он работает так, как ожидалось. Также обратите внимание на то, что буферизуют буферы. «\ r \ n» требуется, чтобы он печатался по строкам.

Sidenote: Спасибо mitsuhiko на #pocoo для его разрешения. Если вы не пробовали колбу, вам нужно. И митишуко, и колба удивительны.

+2

Почему он не работает для нескольких вкладок в браузерах? –