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
를 인쇄합니다. 내가 뭘 놓치고 있니?
제안과 함께 성공하지 못했습니다 (예전과 동일한 방식으로 중단됨). 작은 예제로 확장 할 수 있습니까? –
Ah. 메인 쓰레드와 같은 루프를 사용해야하고,'get_event_loop'은 그 쓰레기가 아니다. –
@ JonasByström 편집 해 주셔서 감사합니다. – Vincent