【问题标题】:How is the threadsafety accomplished in webapp2?webapp2中的线程安全是如何实现的?
【发布时间】:2012-06-19 18:46:11
【问题描述】:

来自webapp2 documentation

默认情况下,webapp2 在模块时是线程安全的 webapp2_extras.local 可用。

如果我查看the source code,我会看到本地用于存储应用程序和请求。然而,我的印象是所有线程(我在主模块中创建的那个)之间只有一个应用程序(WSGIApplication)实例共享,所以当应用程序实例存储在线程局部变量中时,它实际上是同一个实例,这意味着以下代码(取自webapp2_extras)实际上不是线程安全的(get_app 中的应用实际上是在所有线程之间共享的,即使它是从线程本地存储中提取的):

app = app or webapp2.get_app()
mako = app.registry.get(key)
if not mako:
    mako = app.registry[key] = factory(app)

我在这里错过了什么?

【问题讨论】:

    标签: google-app-engine webapp2


    【解决方案1】:

    get_app()返回的应用程序由不同的线程共享,但不一定相同。如果您有两个模块创建WSGIApplication,get_app() 将为它们返回不同的实例。 Mako 实例绑定到特定的应用程序,它获取当前应用程序的方式是线程安全的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-27
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      相关资源
      最近更新 更多