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

时间:2014-09-20 13:02:07

标签: python multithreading google-app-engine global-variables python-multithreading

我有一个谷歌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?在启用多线程/线程安全的情况下使用它是否安全?

1 个答案:

答案 0 :(得分:9)

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

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