我有一个使用命名空间组织数据的GAE应用程序。我的问题是 - 是基于每个线程还是基于每个实例管理命名空间?如果我在GAE配置中启用线程安全,是否可能在一个线程中设置命名空间会影响其他线程?
答案 0 :(得分:5)
set_namespace()
使用os.environ
:
def set_namespace(namespace):
...
os.environ[_ENV_CURRENT_NAMESPACE] = namespace
已修补和os.environ
以使用线程本地存储。
所以,名称空间是线程安全的。
答案 1 :(得分:0)
看起来名称空间在GAE / J上是线程安全的。
已通过运行执行以下操作的简单servlet对此进行了测试:
使用< threadsafe> true< / threadsafe>在appengine-web.xml中设置所有请求都由同一个实例处理。通过检查应用引擎控制台中正在运行的实例数以及检查每个请求的日志来验证这一点。每个日志条目都有一个条目,如:instance = 00c61b117c8e9fd8aa8b02bff53de32a49b20e。在同一实例中,在线程上设置命名空间不会影响其他线程上的命名空间。
要确认配置中的线程安全设置是否正常,它已设置为false并且运行相同的测试。正如所料,每个请求都会启动一个新实例。