2

我有一个使用命名空间组织数据的 GAE 应用程序。我的问题是 - 命名空间是按线程管理还是按实例管理?如果我在 GAE 配置中启用线程安全,是否在一个线程中设置命名空间会影响其他线程?

4

2 回答 2

5

set_namespace()用途os.environ

def set_namespace(namespace):
    ...
    os.environ[_ENV_CURRENT_NAMESPACE] = namespace

os.environ已被修补以使用线程本地存储。

所以是的,命名空间是线程安全的。

于 2012-09-13T02:48:36.730 回答
0

看起来命名空间在 GAE/J 上是线程安全的。

这已经通过运行执行以下操作的简单 servlet 进行了测试:

  • 将命名空间设置为查询字符串参数
  • 循环 25 秒,每 5 秒记录一次命名空间以及线程 ID
  • 使用三个不同的命名空间调用 servlet 3 次,每次调用之间有 10 秒的暂停

在 appengine-web.xml 中设置 <threadsafe>true</threadsafe> 后,所有请求都由同一个实例处理。这通过检查应用引擎控制台中运行实例的数量和检查每个请求的日志来验证。每个日志条目都有一个类似的条目:instance=00c61b117c8e9fd8aa8b02bff53de32a49b20e。在同一实例中,在线程上设置命名空间不会影响其他线程上的命名空间。

为了确认配置中的线程安全设置是否有效,将其设置为 false 并运行相同的测试。正如预期的那样,每个请求都会启动一个新实例。

于 2012-09-30T14:29:45.143 回答