Почему asyncio.gather() не передает отмену немедленно, когда одна задача ожидает блокирующего вызова?Python

Программы на Python
Anonymous
Почему asyncio.gather() не передает отмену немедленно, когда одна задача ожидает блокирующего вызова?

Сообщение Anonymous »

Я пытаюсь понять семантику отмены задач в 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

Вернуться в «Python»