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



我有一个谷歌appengine应用程序,我只想在其中为该请求设置一个全局变量。我能做这个吗?

在request_vars.py 中

# request_vars.py
global_vars = threading.local()

在另一个.py 中

# another.py
from request_vars import global_vars
get_time():
    return global_vars.time_start

在主.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的值是否总是等于main.pyglobal_vars.time_start中设置的值?在启用多线程/线程安全的情况下使用它是否安全?

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

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

最新更新