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

Alb*_*ert 9 python google-app-engine multithreading global-variables python-multithreading

我有一个谷歌appengine应用程序,我想只为该请求设置一个全局变量.我可以这样做吗?

在request_vars.py中

# request_vars.py

global_vars = threading.local()
Run Code Online (Sandbox Code Playgroud)

在另一个.py

# another.py

from request_vars import global_vars
get_time():
    return global_vars.time_start
Run Code Online (Sandbox Code Playgroud)

在main.py中

# main.py

import another
from request_vars import global_vars

global_vars.time_start = datetime.datetime.now()

time_start = another.get_time()
Run Code Online (Sandbox Code Playgroud)

问题:考虑到多线程,并发请求,建立在谷歌的AppEngine,和每秒请求数百(甚至上千),将值time_start总是等于设定的值global_vars.time_startmain.py每次请求?在启用多线程/线程安全的情况下使用它是否安全?

Mar*_*ers 11

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

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