我看到一个奇怪的错误,我在模块范围内创建的变量——例如,在定义任何类或函数之前在文件的顶部——随着时间的推移表现不同。这个变量(我们称它为 _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/