4

この単純なフラスコ/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 を開くと、1 つを除くすべてがブロックされます。私は何を間違っていますか?

私はmonkey.patch_all()で実行してみgunicorn streaming:app -k geventましたが、ブラウザでまだブロックしています。

4

1 に答える 1

4

ブラウザーの複数のタブはブロックされます。これは、gevent/gunicorn が要求を同時に実行していないという意味ではありません。同時curlリクエストとXmlHttpRequestで試してみました-期待どおりに動作します。curl バッファが出力することにも注意してください。行ごとに印刷するには、「\r\n」が必要です。

補足: 問題を解決してくれた #pocoo の mitsuhiko に感謝します。フラスコを試したことがない場合は、試してください。ミツシコもフラスコも最高です。

于 2013-02-21T11:21:09.483 に答える