Развёрнутое пояснение:
1. Создаётся контекстная переменная request_id без значения по умолчанию.
2. В задаче main переменной request_id присваивается значение A.
3. asyncio.create_task создаёт задачу audit и копирует в неё текущий контекст, где request_id равен A.
4. Затем main меняет request_id на B только в собственном контексте.
5. Когда запускается audit, она читает свою копию контекста и печатает A.
Почему это важно
ContextVar применяется для хранения идентификаторов запросов, данных трассировки и другого состояния асинхронной операции. Контекст задачи фиксируется при её создании, поэтому изменение переменной перед фактическим запуском задачи не обновляет уже скопированный контекст.
Post #4895
158
Python: задачки и вопросы
- ✍ 1