Я пытаюсь понять семантику отмены задач в asyncio, особенно когда используется asyncio.gather() и одна из задач косвенно блокирует цикл событий.
import asyncio
import time
async def blocking_task():
time.sleep(5) # Intentional blocking call
return "done"
async def cancellable_task():
try:
await asyncio.sleep(10)
except asyncio.CancelledError:
print("cancellable_task cancelled")
raise
async def main():
task1 = asyncio.create_task(blocking_task())
task2 = asyncio.create_task(cancellable_task())
try:
await asyncio.gather(task1, task2)
except Exception as e:
print("exception:", e)
asyncio.run(main())
Подробнее здесь: https://stackoverflow.com/questions/798 ... one-task-a
Мобильная версия