生产者/消费者协程中的错误可能将项目和未完成的任务留在asyncio队列中。如果遇到错误,我只想停止循环,取消挂起的任务并清除队列。
方法如下:
import asyncio
q=asyncio.Queue()
for i in range(5):
q.put_nowait(i)
q.get_nowait()
loop=asyncio.get_event_loop()
#this will raise an error if q cannot join
loop.run_until_complete(asyncio.wait_for(q.join(),1))
# ================== 方法1
q._queue.clear()
q._finished.set()
q._unfinished_tasks = 0
# ================== 方法2
for _ in range(q.qsize()):
q.get_nowait()
for _ in range(q._unfinished_tasks):
q.task_done()
# ================== 方法3
del q
q=asyncio.Queue()