Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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应用程序中保持全局状态_Python_Flask - Fatal编程技术网

Python 在Flask应用程序中保持全局状态

Python 在Flask应用程序中保持全局状态,python,flask,Python,Flask,这似乎是一个非常明显的问题,但围绕这一点的许多文档非常混乱,并警告我不要保持全局状态,而不是告诉我如何保持全局状态 例如,如果我需要一个数据库连接池(我没有使用SQLAlchemy)或一个对象实例池(两者都需要是全局池,集中管理),我该怎么做 如果我使用flask.g,线程之间不会共享,如果我使用python全局,同一应用程序的多个进程之间不会共享(据我所知,在大型生产flask服务器的情况下可能会产生这种情况)。我是否使用当前的烧瓶应用程序?我是否将池本身作为一个单独的进程?还有什么?关于we

这似乎是一个非常明显的问题,但围绕这一点的许多文档非常混乱,并警告我不要保持全局状态,而不是告诉我如何保持全局状态

例如,如果我需要一个数据库连接池(我没有使用SQLAlchemy)或一个对象实例池(两者都需要是全局池,集中管理),我该怎么做

如果我使用
flask.g
,线程之间不会共享,如果我使用python全局,同一应用程序的多个进程之间不会共享(据我所知,在大型生产flask服务器的情况下可能会产生这种情况)。我是否使用当前的烧瓶应用程序?我是否将池本身作为一个单独的进程?还有什么?

关于web后端应用程序中“不保持每进程全局状态”的警告(Django或任何wsgi应用程序都会遇到同样的问题)仅适用于您希望在请求和进程之间共享的状态

如果每个进程的状态都可以(例如db连接通常是每个进程的状态),那么这就不是问题。wrt/连接池,您可以(或不可以)决定每个服务器进程拥有不同的池是可以的

对于任何其他情况(需要在进程之间共享的任何状态),这通常由一些使用外部数据库或缓存进程的人来处理,因此,如果您希望为所有Flask进程使用一个单一的连接池,则必须使用一个不同的服务器进程来维护该池

还请注意:

同一应用程序的多个进程(据我所知,在大型生产服务器的情况下,可以产生多个进程)

事实上,这与“大”无关。对于传统的“阻塞”服务器,您只能通过使用多线程或多处理来处理并发请求。由于各种原因,unix哲学传统上倾向于多处理(“预工作”模型),无论如何(至少在本文中是这样),因此如果希望一次处理多个请求,您没有太多选择

长话短说,认为WSGi应用程序的任何生产设置都将在后台、后台运行多个进程。p>