3

webapp2 文档

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

如果我查看源代码,我会发现 local 用于存储应用程序和请求。然而,我的印象是所有线程(我在主模块中创建的那个)之间只有一个应用程序(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)

我在这里想念什么?

4

1 回答 1

1

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

于 2012-06-20T15:08:51.263 回答