TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #5052 549
Почему тайм-аут не всегда заканчивается ровно по часам

asyncio.TaskGroup владеет созданными в нём задачами и ждёт их завершения. Если одна падает с обычным исключением, группа запрашивает отмену остальных, дожидается очистки и собирает ошибки в ExceptionGroup.

В разборе отмены и тайм-аутов важна граница: cancel() отправляет запрос, а задача должна получить CancelledError и выполнить finally. Если она подавляет отмену или долго очищает ресурсы, завершение затянется.

wait_for() ждёт окончания отмены, поэтому фактическое время может превысить заданный timeout. Контекст asyncio.timeout() отменяет текущую задачу и преобразует свою отмену в TimeoutError снаружи блока. Для связанных операций помещайте TaskGroup внутрь timeout, чтобы дочерняя работа имела явного владельца.

#python #asyncio
More from @zen_of_python
  1. Oct 12, 2026Что мешает запускать Python из снимка памяти Импорты и инициализация повторяются при каждо…
  2. Oct 11, 2026Почему копия контекста не делает словарь отдельным contextvars помогает хранить request ID…
  3. Oct 11, 2026Почему короткие паузы сборщика мусора обходятся памятью В CPython подсчёт ссылок освобожда…
  4. Oct 11, 2026Как проверить, что мок заменил нужную зависимость Если service.py делает from client impor…
  5. Oct 10, 2026Post #5048
  6. Oct 10, 2026Showboat и Rodney помогают показать работу ИИ-агента Саймон Уиллисон собирает демонстрации…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →