默认情况下,当模块 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)
我在这里想念什么?