CancelledError — всего лишь очередное исключение. Или не совсем?
Когда пользователь закрывает соединение, срабатывает таймаут или отменяется TaskGroup, под капотом запускается довольно сложный механизм прерывания Python-кода.
В статье разобрали:
• что на самом деле происходит при отмене задачи в asyncio;
• что такое CancelledError с точки зрения event loop;
• как устроен протокол cancel/uncancel и как это связано с TaskGroup и asyncio.timeout;
• какие подводные камни возникают при ипользовании asyncio.shield.
Статья для всех, кто пишет на Python и хочет лучше понимать внутренности asyncio ⬇️
Когда пользователь закрывает соединение, срабатывает таймаут или отменяется TaskGroup, под капотом запускается довольно сложный механизм прерывания Python-кода.
В статье разобрали:
• что на самом деле происходит при отмене задачи в asyncio;
• что такое CancelledError с точки зрения event loop;
• как устроен протокол cancel/uncancel и как это связано с TaskGroup и asyncio.timeout;
• какие подводные камни возникают при ипользовании asyncio.shield.
Статья для всех, кто пишет на Python и хочет лучше понимать внутренности asyncio ⬇️