环境:
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>
因此,当搁置文件读取文件时,某些内容无法正常工作。
答案 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中正确读取状态。