Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask中的全局变量和sys.modules概念是什么?_Python_Flask - Fatal编程技术网

Python Flask中的全局变量和sys.modules概念是什么?

Python Flask中的全局变量和sys.modules概念是什么?,python,flask,Python,Flask,我正在努力理解flask中的某些概念,如果您能给我提供一些建议或相关参考链接,我将不胜感激 在python中,默认情况下,应用程序在一个进程上运行,该进程中只有一个线程。如果我们使用线程,那么应用程序从一个进程开始,在该进程中有一个线程;然后,当它遇到线程代码时,它将在同一进程中启动更多线程。当一个线程遇到“import module”语句时,python会在sys.modules中加载该模块,并且这种情况只会在所有线程中发生一次,即使代码在当前线程或任何其他线程上遇到另一个具有相同模块名称的导

我正在努力理解flask中的某些概念,如果您能给我提供一些建议或相关参考链接,我将不胜感激

在python中,默认情况下,应用程序在一个进程上运行,该进程中只有一个线程。如果我们使用线程,那么应用程序从一个进程开始,在该进程中有一个线程;然后,当它遇到线程代码时,它将在同一进程中启动更多线程。当一个线程遇到“import module”语句时,python会在sys.modules中加载该模块,并且这种情况只会在所有线程中发生一次,即使代码在当前线程或任何其他线程上遇到另一个具有相同模块名称的导入

然而,我对烧瓶中的行为感到困惑。我已经读到一个过程可以有一个或多个烧瓶应用程序。一个烧瓶应用程序可以在多个过程中启动

此外,flask本身似乎是多线程的,因为例如,假设我们只有一个flask应用程序,当我们运行flask应用程序时,它会加载到一个或多个进程中(每个进程都有主线程),然后对于用户发出的每个请求,会为请求分配一个新线程。这个新线程将处理请求(调用相应的函数)

我想知道-

1) 考虑到flask应用程序可以在多个进程中加载和/或每个进程可以有多个应用程序,模块是在sys.modules perthread(peruser)中加载的,还是在flask中每个进程中加载的

2) 假设一个线程更新一个全局变量、模块变量或类变量,该变量与路由位于同一级别(即-在路由函数之外),(我知道这不是线程安全的,但假设它是以没有冲突的方式更新的)。那么,是否每个后续线程(当前用户reuqest和其他用户请求的)都有权访问对全局变量所做的更新,或者后续线程只能看到全局变量、模块变量和类变量的原始值?我试图理解是否所有用户reuqests的线程都可以访问对globals的更新,因为我假设线程只运行相应的函数,而不运行其他函数。flask中的全局变量概念是什么?它是一个用户的全局线程还是所有用户的全局线程

我知道线程局部变量(g,current_user),它们是基于每个请求的。我还读到,在局部函数中声明的普通变量是线程安全的,但是如果说我声明变量并将其指向导入的模块变量,然后对其进行变异,那么它将更新模块变量,引用模块变量的任何位置都将看到更改。那么它是如何线程安全的呢