Молчащий heartbeat сторож трактовал как смерть прогона и снимал его по порогу 10 минут. Но запись большой пачки отпечатков в базу на HDD идёт COPY'ем 6-15 минут без единого тика heartbeat — и сторож убивал вполне живой прогон, тут же запуская дубль по тем же статьям. Корпус часами топтался на месте: из лога видно десятки перезапусков подряд с нулевым приростом. Теперь перед снятием сторож спрашивает воркеров queue.index через inspect().active(), выполняется ли ещё таск прогона. Снимаются только настоящие зомби — те, чьего celery_task_id нет ни на одном воркере. Если хоть один воркер не ответил, живость не проверить и не снимается ничего (fail-safe). Проверено на живом прогоне: его таск попал в набор активных, прогон помечен защищённым. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
8.2 KiB
Executable File
8.2 KiB
Executable File