芹菜花持久数据未恢复

时间:2017-10-25 08:35:07

标签: celery flower

环境:

  • Python:3.4
  • 芹菜:4.1.0
  • 花:0.9.0
  • Centos:7.0

    使用了

    --persistent标志。芹菜版v4.1.0。

如果我创建了几个任务,它们会按预期运行。

发送SIGINT之后:

[D 150923 14:43:09 events:96] Saving state to 'flower'...
[D 150923 14:43:09 events:97] <State: events=54 tasks=4>

DB文件'flower'显然包含正确的数据。当我再次开花时:

[D 150923 14:47:35 events:76] Loading state from 'flower'...
[D 150923 14:47:35 events:80] <State: events=0 tasks=0>

如果我运行Python并使用shelve加载文件:

> f['events']
> <State: events=0 tasks=0>

因此,当搁置文件读取文件时,某些内容无法正常工作。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。看起来celery的State.__repr__方法打印出event_count和task_count属性。

来自https://github.com/celery/celery/blob/v4.1.0/celery/events/state.py

R_STATE = '<State: events={0.event_count} tasks={0.task_count}>'
....
def __repr__(self):
    return R_STATE.format(self)

但是,腌制形式不包含event_count和task_count,这意味着当从数据库读回内容时,这些属性将默认为0。来自同一文件:

def __reduce__(self):
    return self.__class__, (
        self.event_callback, self.workers, self.tasks, None,
        self.max_workers_in_memory, self.max_tasks_in_memory,
        self.on_node_join, self.on_node_leave,
        _serialize_Task_WeakSet_Mapping(self.tasks_by_type),
        _serialize_Task_WeakSet_Mapping(self.tasks_by_worker),
)

您会注意到,启用持久性后,花朵“任务”视图中列出的任务将在花朵重新启动后保持不变,这表明正在从db中正确读取状态。