关于context stack的几点疑问

最近在看flask源码的时候遇到一个问题,希望各位大大能够解惑。

flask在每个请求进来的时候,会根据当前请求生成一个上下文,推进_request_ctx_stack当中去。StackOverflow和书上均提到说这是为了多应用程序而将保存上下文的结构设计为栈的。这里有几点疑问。

  1. 当同时处理多个请求时,每个请求当中的上下文栈是否唯一?根据LocalStack的实现,我的理解是,对于每个线程,均会创建一个新的栈。
  2. 关于上一个问题,引申出来一个问题,就是flask程序本身是否是多线程/进程程序。在与别人讨论的过程中,我发现很多人会因为app.run()的参数直接说flask是个多线程/进程程序。但我的理解是flask本身不提供多线程/进程支持,它是什么类型的程序取决于WSGI的设计。而LocalStack这种本地线程变量为WSGI多线程的设计提供了支持。
  3. 据问题1的讨论,如果每个请求的LocalStack是相互独立的情况下,那多应用程序的时候,请求的上下文是否也是各自独立呢?我看到有一个说法说是若应用A依赖应用B的一个上下文,那么在执行应用A的时候调用应用B,此时栈中会有两个应用程序的上下文。除此以外是否还有其他场景栈上会有多个不同上下文的情况呢?

这个问题回答起来说来话长,推荐一篇7年前的文章,我认为仍未过时

https://blog.tonyseek.com/post/the-context-mechanism-of-flask/

感谢回复,思路清晰了很多