Локальные переменные контекста
Возможно, у вас есть данные в каждом запросе, которые вы хотите использовать в разных функциях. Вместо того, чтобы передавать их аргументами между каждой функцией, вы можете получить доступ к ним как к глобальным данным. Однако использование глобальных переменных в веб-приложениях Python небезопасно в многопоточной среде; разные рабочие процессы могут вмешиваться в данные друг друга.
Вместо хранения общих данных во время запроса с помощью глобальных переменных, необходимо использовать локальные переменные контекста. Локальная переменная контекста определяется/импортируется глобально, но данные, которые она содержит, специфичны для текущей нити, задачи asyncio или greenlet. Вы не получите и не перезапишете данные другого рабочего процесса случайно.
Текущий подход к хранению данных на контекст в Python — это модуль contextvars. Переменные контекста хранят данные на нить, задачу async или greenlet. Это заменяет более старую threading.local, которая обрабатывала только нити.
Werkzeug предоставляет обёртки вокруг ContextVar, чтобы упростить работу с ними.
© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/2.2.x/local/