Является ли 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. Это локальное значение потока будет уникальным для этого потока.

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

Другие вопросы по тегам