asyncio.Queue
は同じスレッドでのみプッシュできますか?例えば:バックグラウンドスレッドで使用すると非同期キューがハングアップする
import asyncio
from threading import Thread
import time
q = asyncio.Queue()
def produce():
for i in range(100):
q.put_nowait(i)
time.sleep(0.1)
async def consume():
while True:
i = await q.get()
print('consumed', i)
Thread(target=produce).start()
asyncio.get_event_loop().run_until_complete(consume())
のみ
consumed 0
を印刷した後ハング。私は何が欠けていますか?
あなたの提案にうまくいくことはありません(以前と同じ方法でハングアップしています)。 –
ああ。メインスレッドと同じループを使用する必要があり、 'get_event_loop'はそのためではありません。 –
@JonasByströmまさに、編集のおかげで! – Vincent