Как контролировать 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):
    ...
Вернуться на верх