Почему 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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