Python – Django Celery – кейс длиною в вечность.

Вкратце: когда добавляешь пачку тасок на Celery worker’ы, случается так, что парочка из них отваливается или засыпает или еще чего.

Долго не доходили руки поправить это недоразумение, поэтому я просто рестартовал все воркеры раз в пару дней или прямо перед началом проверки рутины, в общем очень сложно было поймать и воспроизвести тот случай, когда без каких-либо ошибок воркер просто молчал.

И наконец дошоли руки запилить кривофикс, время покажет насколько он толковый, суть в следующем:

В сразу после момента определения свободного воркера  – запускать app.control.heartbeat() и app.control.ping(timeout=10) и если ответ пришел (в виде [{'alpha@host': {'ok': 'pong'}}]) – значит воркер готов и можно передавать ему таску, пачку тасков, рутину и тп. Если ответ пришел отличным от этого – даем ошибку и ничего не запускаем далее. При плохом раскладе пользователю придется просто перезапустить задачу посредством нажатия кнопочки еще раз, а вот запланированная таска – умрет.

Общий вид на код примерно такой:

Набросавши на скорую руку

 

В планах конечно же сделать еще одну автопроверку, если воркер не ответил – выбрать другой и переназначить, о чем в последующем обновлении страницы и письма – уведомить пользователя, ведь в конечном итоге ему все равно какой именно воркер использовался, а я потом смогу отловить ошибку по логам, или сделать отдельную ветку со сбором всей статистики в момент когда ошибка произошла.

========================================

Здесь что-то будет?

Пока еще не знаю с чего начинать цикл постов о том, “Celery на Django или: Как я перестал бояться и полюбил Test Automation” – потому что в идеале его нужно начинать с самого начала, пару лет назад, когда я только начал делать автоматизацию локальных прогонов тестов, синтаксиса TPL и прочих няшек – а это очень много материала. Придется описывать и вспоминать очень многое, лазить в дербри ужасного старого кода, который я писал в свободное от работы время и на скорую руку лишь бы работало вот сейчас. И то как этот старый код перерос себя и несколько раз менял систему и дизайн. 

Так или иначе, здесь должна будет разместиться плашка с кратким описанием истории, ссылками на посты, оглавление и все такое прочее, но это будет сделано сильно позже, а пока я просто попробую записать текущие интересные заметки, пока не забыл.

 

trianglesis

About trianglesis

Александр Брюндтзвельт - гений, филантроп, 100 гривен в кармане. Этот блог - "сток" моих мыслей и заметок. Достаточно одного взгляда на него, чтобы понять, что такой же бардак творится у меня в голове. Если вам этот бардак интересен - милости прошу.
Bookmark the permalink.

Comments are closed.