Я читал документацию asyncio для отмены задачи, и я наткнулся на this -
Чтобы отменить запущенную задачу, используйте метод cancel (). Вызов этого приведет к тому, что Задача сгенерирует исключение CancelledError в завернутую сопрограмму. Если сопрограмма ожидает объекта Future во время отмены, объект Future будет отменен.
cancelled () можно использовать для проверки отмены задания. Метод возвращает True, если завернутая сопрограмма не подавила исключение CancelledError и была фактически отменена.
У меня есть несколько вопросов здесь -
Является ли завернутая сопрограмма сопрограммой, в которой вызывается отмена? Давайте рассмотрим пример здесь -
async def wrapped_coroutine():
for task in asyncio.Task.all_tasks():
task.cancel()
Итак, wrapped_coroutine()
- это завернутая сопрограмма, в которой задача будет выдавать исключение?
Когда будет выдано это исключение? А где?
Что здесь означает исключение? Означает ли это это -
async def wrapped_coroutine():
for task in asyncio.Task.all_tasks():
task.cancel()
try:
await task
except asyncio.CancelledError:
print("Task cancelled")
Если нет, приведите пример того, как подавить это исключение.
И не связано (это связано с отменой задач), как мне извлечь исключения из этих задач, когда я отменяю их, чтобы я не видел это -
Task exception was never retrieved future:
До task.cancel()
или try
до await task
(в приведенном выше примере)?