TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #5051 482
Почему копия контекста не делает словарь отдельным

contextvars помогает хранить request ID для задач, которые выполняются на одном потоке event loop. При обычном создании asyncio.Task контекст копируется, поэтому новая задача получает текущую привязку переменной.

Но копия контекста поверхностная. Если ContextVar содержит словарь, родитель и дочерняя задача могут видеть один объект. Изменение его содержимого будет общим; set с новым значением меняет привязку в текущем контексте.

Для метаданных запроса удобнее неизменяемые значения. После set сохраняйте токен и восстанавливайте предыдущую привязку через reset в finally. Дочерняя задача может сохранить захваченный контекст и после завершения запроса, поэтому долгоживущей фоновой работе передавайте только необходимые данные.

#python #asyncio
More from @zen_of_python
  1. Oct 11, 2026Почему короткие паузы сборщика мусора обходятся памятью В CPython подсчёт ссылок освобожда…
  2. Oct 11, 2026Как проверить, что мок заменил нужную зависимость Если service.py делает from client impor…
  3. Oct 10, 2026Post #5048
  4. Oct 10, 2026Showboat и Rodney помогают показать работу ИИ-агента Саймон Уиллисон собирает демонстрации…
  5. Oct 10, 2026Почему max_workers не ограничивает очередь задач ThreadPoolExecutor(max_workers=8) разреша…
  6. Oct 10, 2026Как измерять время async-функции через декоратор Обычная обёртка может вызвать async-функц…
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 →