Перейти к содержанию

ContextVar

Что это?

ContextVar, как бы странно не звучало, это переменная контекста. Это такие переменные которые умееют сохранять и передавать свое состояние в другие корутины/потоки. Часто контекстные переменные используют для реализации трассировки/профилирования запросов, которые проходят сквозь обработчики.

Концепция аналогична TLS (thread local storage), но в отличии от TLS контекстные переменные умеют правильно работать с асинхронными задачами.

Выглядят они так:

from contextvars import ContextVar

request_id: ContextVar[int] = ContextVar('request_id')

Важно

Переменные контекста следует создавать на верхнем уровне модуля, а не в замыканиях. Объекты контекста содержат "сильные" ссылки на переменные контекста, что предотвращает сборку мусора для этих переменных.

Важно

Изменения контекстной переменной внутри генератора не будут видны в вызывающем коде.

Ссылки