Как устроен механизм Context Variables (contextvars) на уровне внутренней хэш-таблицы CPython?

Context в CPython основан не на обычной изменяемой хеш-таблице dict, а на персистентной структуре HAMT. Она позволяет дёшево копировать контекст и разделять неизменённые узлы между версиями.

Короткий ответ

Что ответить на собеседовании

Context в CPython основан не на обычной изменяемой хеш-таблице dict, а на персистентной структуре HAMT. Она позволяет дёшево копировать контекст и разделять неизменённые узлы между версиями.

Подробный разбор

Ответ с пояснениями

Context в CPython основан не на обычной изменяемой хеш-таблице dict, а на персистентной структуре HAMT. Она позволяет дёшево копировать контекст и разделять неизменённые узлы между версиями.

Ключами служат объекты ContextVar. При set создаётся изменённый путь структуры, а не копируется всё отображение; copy_context() имеет O(1) сложность. Планировщик asyncio переключает текущий контекст вместе с задачей, поэтому значения не смешиваются как при обычном thread-local в одном потоке. Token позволяет восстановить предыдущее значение. Копия контекста поверхностная: изменяемый объект, лежащий в значении, не клонируется автоматически.

Источник: peps.python.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее