Check

Отмена корутин и обработка отмены

Python Senior Яндекс
Как корректно обрабатывать отмену задач в `asyncio` (например, при таймауте)? Какие исключения возникают и что важно не забыть при очистке ресурсов?
Ответы
Отмена задач asyncio
Отмена задачи в `asyncio` делается через `task.cancel()`. В корутине при этом поднимается `asyncio.CancelledError`, который нужно либо пробросить, либо корректно обработать. Пример: ```python import asyncio async def worker(): try: await asyncio.sleep(10) except asyncio.CancelledError: # очистка ресурсов print('cancelled') raise async def main(): task = asyncio.create_task(worker()) await asyncio.sleep(1) task.cancel() try: await task except asyncio.CancelledError: pass ```