我有一个谷歌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.py
中global_vars.time_start
中设置的值?在启用多线程/线程安全的情况下使用它是否安全?
是的,使用threading.local
是设置每个请求全局的优秀方法。您的请求将始终由一个线程在谷歌云中的一个实例上处理。该线程的本地值对于该线程是唯一的。
考虑到线程可以用于未来的请求,并始终在请求开始时重置值。