Сельдерей: поврежден штат полезной нагрузки. Возможные причины? Оформлен ли метод __call __ () причиной? - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь диагностировать это, но хочу выкинуть вопрос, если кто-нибудь видел что-то подобное.

По сути, я вижу AsyncResult (task_id), возвращающий результат с состоянием None.

Eeer ie.

Я использую rp c: backend.

Итак, я углубился в код Celery и очереди RabbitMQ, и с обоих углов я вижу, что сообщение о состоянии выглядит как это:

dict: {'task_id': 'STARTED', 'status': None, 'result': {'pid': 24113}, 'traceback': None, 'children': []}

Очевидно, поврежден. STARTED должен находиться под статусом.

Я даже имею некоторое представление о том, что является причиной этого, я просто должен доказать это и найти доказательства, и как это исправить. По меньшей мере, это трудоемко, и поэтому я бы с удовольствием: а) ускорил бы его, предложив бесплатный опыт, и б) записал его здесь, если я его решу, для потомства (в случае, если кто-нибудь еще столкнется с этим) .

Это может (возможно) быть связано с моим украшением задачи. вызов метода (). Но я застрял, пытаясь понять, как.

Драгоценный камень понимания - где в Celery сообщение о состоянии, отправленное в резервную очередь RP C? Похоже, это неправильно компилируется. До сих пор я проследил это до отправки события, запускаемого задачей, в обмен celerev (для событий, которые я представляю), и, возможно, это событие вызывает обновление состояния, которое будет отправлено.

Я продолжу копаться. Но пока я сплю, может быть, у кого-то есть подсказка?

1 Ответ

0 голосов
/ 25 апреля 2020

Ой, нашел проблему. И не уверен, когда это проникло в кодовую базу!

Часы, которые я потратил на отслеживание кода, чтобы найти его, почти смущают, как в конце, и являются полной слепой человеческой ошибкой. Код, который ломается:

self.update_state(state, meta=meta)

Что работает:

self.update_state(state=state, meta=meta)

, и это просто потому, что Task.update_state () имеет эту подпись:

def update_state(self, task_id=None, state=None, meta=None, **kwargs):

что нас, task_id нам по умолчанию. В какой-то момент по какой-то причине рабочий код был изменен. Хмммм, история о том, как и когда, не совсем ясно, увы (часть довольно крупного рефакторинга между коммитами). Резон, который я провалил в этом метинксе, связан с тем, что первые обновления состояния Celery (стандартное обновление состояния Celery (STARTED) были прерваны, и это не сгенерировано строкой выше, которую я исправил. Загадка для меня.

...