python - 与 uWSGI 一起使用时,模块级变量是否安全?

标签 python django scope uwsgi

我看到一个奇怪的错误,我在模块范围内创建的变量——例如,在定义任何类或函数之前在文件的顶部——随着时间的推移表现不同。这个变量(我们称它为 _cache)被拉入我的类中:

_cache = None

class XMLGenerator(object):
    global _cache

    def __init__(self, parms):
        if _cache is None:
             _cache = expensive_query(parms)

此缓存的结果可能会有所不同,具体取决于进入 Web 服务的请求的上下文,但我在调用同一服务的结果 XML 输出中看到了不同的行为:我可以重新启动服务器,一切正常很好,但最终异常行为又开始了。

uWSGI 是否以某种方式在请求之间保存状态?

最佳答案

我想绕回去解释一下这里发生的事情。事实上,在对 uWSGI 中相同服务的请求之间,全局变量不会“刷新”。因此,如果您创建一个模块级变量,它将在多个请求之间携带状态。显然,这不是我想要的;所以我最终在对 XMLGenerator 的不同调用之间传递了一个缓存对象。它导致 API 非常丑陋,但避免了模块级变量的问题。

关于python - 与 uWSGI 一起使用时,模块级变量是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11165827/

相关文章:

c++ - 如何返回在函数中创建的 char 数组?

F#:为什么我不能在作用域关闭的行上设置断点?

python - 有没有更pythonic的方式来写这个?

python - 基于字符串模式删除列表中元素的最佳方法

django - 以 django 形式自定义呈现 radioselect/访问单个元素?

python - 如何在仍然使用 WebSocket 的同时运行 Gunicorn

python - 在标准列表管理中显示多个模型的字段

c++ - 如何从方法访问类成员?

python - OrientDB:服务器和数据库之间时区不同的 python 中 SELECT 的日期时间转换问题

python - sum() 之类的函数是什么,但用于乘法?产品()?