我将 Flask 与 Huey 结合使用来处理脱离上下文的长时间运行的任务。所以本质上,一个烧瓶上下文是由一个 Huey 消费者(一个工作进程)启动的,它做了很多需要一些时间的工作。在这个过程中,我使用 Flask 全局“g”对象来存储用户。
@staticmethod
def CurrentUser():
if g:
if hasattr(g, 'usr'):
user = g.usr
else:
# no user is linked to g yet - see if we can find and load one by searching for a UUID in the cookies
user = UserStateManager.LoadUserState()
g.usr = user
else:
# no g object - maybe we are running outside of the flask context - use a default user
user = UserStateManager.DefaultUserstate()
return user
问题是大约 20 分钟后 g.usr 对象突然消失了。这是一个很难调试的问题,因为此时的代码正在由 Huey 任务工作者运行,而我无法在 IDE 中运行它。(嗯,我可以,但是上下文不同,所以情况不同)。
我可以看到它开始时很好,因为它会将包含用户 ID 的记录写入数据库,但大约 20 分钟后,用户 ID 字段突然为空。看起来好像 g 对象在某个地方被清理了。
所以我的问题是,是否有人知道什么可能会触发 g 对象中 usr 数据的消失。g-object 是否存在超时或某种形式的垃圾收集?