gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:08:12 24 4
gpt4 key购买 nike

这似乎是一个非常明显的问题,但是围绕这个问题的很多文档都非常令人困惑,并警告我不要保持全局状态,而不是告诉我如何保持。

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

如果我使用flask.g ,这不在线程之间共享,如果我使用 python 全局变量,则不在同一应用程序的多个进程之间共享(据我所知,可以在大型生产 Flask 服务器的情况下生成)。我使用 flask.current_app ?我是否使池本身成为一个单独的进程?还有别的吗?

最佳答案

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

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

对于其他任何事情 - 需要在进程之间共享的任何状态 - 这通常由一些使用某些外部数据库或缓存进程来处理,因此如果您想为所有 Flask 进程使用一个连接池,您将拥有实际上使用不同的服务器进程来维护池。

另请注意:

multiple processes of the same application (which, as I understand, can be spawned in the case of large production flask servers)

其实这和“大”无关。对于传统的“阻塞”服务器,您只能使用多线程或多处理来处理并发请求。由于各种原因,unix 哲学传统上倾向于多处理(“prefork”模型),并且 Python's multithreading is bordering on useless无论如何(至少在这种情况下),所以如果您希望一次满足一个以上的请求,您就没有太多选择。

长话短说,请考虑 wsgi 应用程序的任何生产设置都会在后台运行多个进程。

关于python - 在 Flask 应用程序中保持全局状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51874276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com