Python threading.local()是在Google AppEngine中为单个请求存储变量的安全方法吗?

Python threading.local()是在Google AppEngine中为单个请求存储变量的安全方法吗?,python,multithreading,google-app-engine,global-variables,python-multithreading,Python,Multithreading,Google App Engine,Global Variables,Python Multithreading,我有一个google appengine应用程序,我只想为该请求设置一个全局变量。我能做这个吗 在请求中\u 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 an

我有一个google appengine应用程序,我只想为该请求设置一个全局变量。我能做这个吗

在请求中\u 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\u start
的值是否总是等于
global\u vars.time\u start
main.py
每个请求设置的值?在启用多线程/线程安全的情况下使用该方法安全吗?

是的,使用
线程。本地
是设置每个请求全局值的一种很好的方法。您的请求将始终由一个线程在谷歌云中的一个实例上处理。该线程本地值对于该线程是唯一的


考虑到线程可以在将来的请求中重用,并始终在请求开始时重置该值。

除了下面的答案之外,在使用appengine时,您可以将环境用于本地存储,它的内容仅存在于当前请求中。这不一定适用于非appengine环境。