QT アプリケーションの requests モジュールのジェネレーター関数を使用しています。これは、要求ストリーミングの例とほとんど同じです。
import json
import requests
def get_stream():
r = requests.get('http://httpbin.org/stream/20', stream=True)
for line in r.iter_lines():
if line:
yield json.loads(line)
def consume_stream():
for message in get_stream():
#do something
ただし、着信応答がない場合 (Twitter のストリーミング API から不定期に着信するツイート)、ジェネレーターはメソッドget_stream
をブロックしconsume_stream
ます。
これは、ジェネレーターがすぐに譲歩せず、受信メッセージなどを待たなければならない状況で発生する可能性があり、したがってコンシューマーをブロックします。
ジェネレーターをブロックしない方法で消費できる Python のパターンはありますか?