为什么flask 中的应用程序上下文不是应用程序的单例?

jay*_*ven 3 python singleton thread-local flask

我已经阅读了烧瓶文档并发现了这个:

13.3 上下文的局部性

根据需要创建和销毁应用程序上下文。它永远不会在线程之间移动,也不会在请求之间共享。

这对我来说真的很奇怪。我认为应用程序上下文应该与应用程序保持一致,并为应用程序的所有请求共享对象。

因此,我深入研究源代码并发现,当推送请求上下文时,如果当前应用程序不是与请求关联的应用程序上下文,则将创建并推送应用程序上下文。

因此,对于推送的同一个应用程序,应用程序上下文堆栈似乎可能有多个不同的应用程序上下文?为什么不使用单例应用程序上下文?为什么应用上下文的生命周期如此“短”?对于这样的应用程序上下文可以做什么?

Mar*_*ers 5

应用程序上下文用于在请求之间共享。在设置请求上下文之前以及在请求已经被拆除之后共享上下文。是的,这意味着g对于不同的请求可以有多个活动的上下文。

您不能共享“全局”状态,因为 WSGI 应用程序不限于单个进程。许多 WSGI 服务器使用多处理来扩展请求处理,而不仅仅是线程。如果您需要跨请求共享“全局”状态,请使用数据库或 memcached 之类的东西。