когда except срабатывает, получается мы отбрасывает эту задачу, как ее повторно отработать?!
.get
, и здесь мы просто получаем Exception, но ничего не достаем из очереди и просто уходим на следующий цикл, где достанем остаток и продолжим работатьimport asyncio
import random
async def consumer(queue):
loop = True
while(loop or (not queue.empty())):
try:
item = await queue.get()
print(f'- Item {item}')
await asyncio.sleep(random.randint(1,100)*.00001)
except asyncio.CancelledError:
loop = False
print('-- Interrupt task')
async def producer(queue):
for item in range(1,1001):
print(f'+ Item {item}')
await queue.put(item)
await asyncio.sleep(random.randint(1,100)*.00001)
async def main():
queue = asyncio.Queue(maxsize=100)
p = asyncio.create_task(producer(queue))
c = asyncio.create_task(consumer(queue))
await p
c.cancel()
await c
asyncio.run(main())
.......
+ Item 991
+ Item 992
- Item 990
+ Item 993
+ Item 994
- Item 991
- Item 992
+ Item 995
- Item 993
+ Item 996
+ Item 997
- Item 994
+ Item 998
- Item 995
+ Item 999
- Item 996
+ Item 1000
- Item 997
-- Interrupt task
- Item 998
- Item 999
- Item 1000
import asyncio
async def consumer(queue):
loop = True
while(loop or (not queue.empty())):
try:
item = await queue.get()
print(f'- Item {item}')
except asyncio.CancelledError:
loop = False
print('-- Interrupt task')
async def producer(queue):
for item in range(1,1001):
print(f'+ Item {item}')
await queue.put(item)
async def main():
queue = asyncio.Queue(maxsize=100)
p = asyncio.create_task(producer(queue))
c = asyncio.create_task(consumer(queue))
await p
c.cancel()
await c
asyncio.run(main())