gpt4 book ai didi

python - 如何在 WSGI env 中处理本地长期存在的对象

转载 作者:太空宇宙 更新时间:2023-11-04 08:17:23 24 4
gpt4 key购买 nike

简介

经过大约 10 年的 PHP 开发和习惯,我最近转向了 Python。

例如。在 Symfony2 中,每个对服务器(例如 Apache)的请求都必须加载,例如。容器类并实例化它,以构建对象的“其余部分”。

据我了解(我希望)Python 的 WSGI env,一个应用程序创建一次,直到该应用程序关闭,每个请求都只调用方法/函数。

这意味着我可以拥有例如。某个类的一个实例,每次都可以访问,请求被调度,而不必在每个请求中实例化它。我说得对吗?

问题

我想要一个类的实例,因为对 __init__ 的调用非常昂贵(在计算和资源锁定方面)。在 PHP 中,在每个请求中实例化它会降低性能,我是否正确使用 Python 的 WSGI 我可以在应用程序启动时实例化一次,并通过请求使用?如果是这样,我该如何实现?

最佳答案

WSGI 只是一个标准化的接口(interface),它可以构建网络服务器架构的各种组件,以便它们可以相互通信。

Pyramid 是一个框架,其组件通过 WSGI 相互粘合。

Pyramid 与其他 WSGI 框架一样,可以选择堆栈的实际服务器部分,例如 gunicorn 、Apache 或其他。该选择由您做出,而这就是您问题的最终答案。

你需要知道的是你的服务器是多线程还是多进程。在后一种情况下,检查全局变量是否已实例化以初始化昂贵的资源是不够的,因为后续请求可能会在不共享状态的单独进程中结束。

如果您的模型是多线程的,那么您可能确实依赖于全局状态,但请注意您在代码中引入了强依赖性这一事实。也许单例模式与依赖注入(inject)相结合可以帮助您保持代码更简洁,更易于更改。

关于python - 如何在 WSGI env 中处理本地长期存在的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11941375/

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