0

我将 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 是否存在超时或某种形式的垃圾收集?

4

1 回答 1

0

只要请求存在,g 就会有信息

g 绑定到应用程序上下文,并且将在内存中直到请求结束。

这绝对不是为任务队列存储用户信息的好地方

于 2019-01-09T13:32:01.410 回答