1
私のプロデューサ/コンシューマコルーチンのエラーは、アイテムと未完了のタスクをasyncioキューに残すことがあります。エラーが発生した場合は、単にループを停止し、保留中のタスクをキャンセルしてキューをクリアします。私は最初の2つのことを終えることができますが、私はキューをクリアする簡単な方法を見つけることができません。 this answerを読んだ後、私は三つの方法を思い付く:python3で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))
#method 1
q._queue.clear()
q._finished.set()
q._unfinished_tasks = 0
#method 2
for _ in range(q.qsize()):
q.get_nowait()
for _ in range(q._unfinished_tasks):
q.task_done()
#method 3
del q
q=asyncio.Queue()
だから、どちらが良いですか?
関連:[プロデューサasyncioユーザマニュアルの/消費者(https://asyncio.readthedocs.io/en/latest/producer_consumer.html) – Vincent