Является ли threading.local() безопасным способом хранения переменных для одного запроса в Google AppEngine?
У меня есть приложение Google Appengine, где я хочу установить глобальную переменную только для этого запроса. Я могу это сделать?
В request_vars.py
# request_vars.py
global_vars = threading.local()
В другом
# another.py
from request_vars import global_vars
get_time():
return global_vars.time_start
В main.py
# main.py
import another
from request_vars import global_vars
global_vars.time_start = datetime.datetime.now()
time_start = another.get_time()
Вопросы. Учитывая многопоточность, одновременные запросы, использование Google AppEngine и сотни (даже тысячи) запросов в секунду, значение time_start
всегда быть равным значению, установленному в global_vars.time_start
в main.py
за запрос? Безопасно ли это использовать с поддержкой многопоточности / многопоточности?
1 ответ
Да, используя threading.local
отличный способ установить глобальный запрос Ваш запрос всегда будет обрабатываться одним потоком, одним экземпляром в облаке Google. Это локальное значение потока будет уникальным для этого потока.
Примите во внимание, что поток может быть повторно использован для будущих запросов, и всегда сбрасывайте значение в начале запроса.