【问题标题】:Celery flower Persistent data not restored芹菜花持久数据未恢复
【发布时间】:2018-04-06 06:18:35
【问题描述】:

环境:

  • 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>

数据库文件“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 读取文件时,有些东西不能正常工作。

【问题讨论】:

    标签: celery flower


    【解决方案1】:

    我遇到了同样的问题。看起来 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 不包含在 pickle 表单中,这意味着当从 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-08-14
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 2016-03-18
      • 1970-01-01
      • 2015-11-16
      相关资源
      最近更新 更多