Как контролировать Celery worker и возвращать задачу обратно в очередь, если рабочий умер или был убит?
**Описание проблемы:**
У меня есть микросервис, который использует Celery для выполнения асинхронных задач. Мне нужно отслеживать состояние рабочего Celery и возвращать задачу обратно в очередь, если рабочий умирает или погибает (например, из-за сигнала SIGKILL).
У меня также есть еще один экземпляр Celery, запущенный на стороне главного сервиса.
** Вопрос:**
Есть ли способ отслеживать состояние рабочего Celery и автоматически возвращать задачу обратно в очередь, если рабочий умирает или погибает?
**Дополнительная информация:**
- Использование visibility_timeout не подходит, так как это потребует ожидания в течение дня, прежде чем задача вернется в очередь, тогда как мне нужно, чтобы это произошло почти мгновенно.
Возможно, вы сможете добиться искомого, используя конфигурации Celery task_acks_late
и task_reject_on_worker_lost
, где хорошо объясняется, как они работают, или из официальной документации Celery, где и где. Оба параметра также доступны на уровне задачи, как видно из здесь и здесь.
Например,
@app.task(acks_late=True, reject_on_worker_lost=True)
def my_task(*args, **kwargs):
...