我有一个谷歌appengine应用程序,我想只为该请求设置一个全局变量。我可以这样做吗?
在request_vars.py
中# request_vars.py
global_vars = threading.local()
在another.py中
# 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
?在启用多线程/线程安全的情况下使用它是否安全?
答案 0 :(得分:9)
是的,使用threading.local
是设置每个请求全局的绝佳方法。您的请求将始终由一个线程处理,在Google云中的一个实例上。该线程的本地值对于该线程是唯一的。
考虑到线程可以重用以用于将来的请求,并始终在请求开始时重置该值。