Цветок сельдерея Постоянные данные не восстановлены

Окружающая среда:

  • Питон: 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>

Файл БД «цветок» явно содержит правильные данные. Когда я снова начинаю цвести:

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

Итак, что-то работает неправильно, когда полка читает файл.


person Dave    schedule 25.10.2017    source источник


Ответы (1)


Я столкнулся с той же проблемой. Похоже, что метод сельдерея 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),
)

Вы заметите, что когда постоянство включено, задачи, перечисленные в представлении «Задачи» цветов, будут сохраняться при перезапусках цветов, что показывает, что состояние правильно считывается из базы данных.

person MicGer    schedule 26.07.2018