1

环境:

  • 蟒蛇:3.4
  • 芹菜:4.1.0
  • 花:0.9.0
  • 森托斯: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 并使用搁置加载文件:

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

所以,当 shelve 读取文件时,有些东西不能正常工作。

4

1 回答 1

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,这意味着当从 db 读回内容时,这些属性将默认为 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),
)

您会注意到,启用持久性后,花“任务”视图中列出的任务将在花重启后持续存在,这表明状态正在从数据库中正确读取。

于 2018-07-26T20:32:26.987 回答