Отмена задания Celery приводит к тайм-ауту работника Heroku dyno worker

Мое приложение Django API имеет класс представления, который определяет метод post и метод patch. Метод post создает ресурс резервирования с заданным пользователем сроком действия и создает задачу Celery, которая изменяет этот ресурс по истечении заданного пользователем срока действия. Метод исправления дает пользователю возможность обновить время истечения срока действия. Изменение времени истечения срока действия также требует изменения задачи Celery. В моем методе исправления я использую app.control.revoke(task_id=task_id, terminate=True, signal="SIGKILL") для отзыва существующей задачи, а затем создаю новую задачу с измененным временем истечения срока действия.

Все это прекрасно работает в моей локальной установке Docker. Но как только я развертываю на Heroku, рабочий Celery завершает работу после того, как выполнение вышеуказанной команды app.control.revoke(...) вызывает тайм-аут запроса с кодом ошибки H12.

2021-11-21T16:39:35.509103+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=PATCH path="/update-reservation-unauth/30/emailh@email.com/" host=secure-my-spot-api.herokuapp.com request_id=e0a304f8-3901-4ca1-a5eb-ba3dc06df999 fwd="108.21.217.120" dyno=web.1 connect=0ms service=30001ms status=503 bytes=0 protocol=https
2021-11-21T16:39:35.835796+00:00 app[web.1]: [2021-11-21 16:39:35 +0000] [3] [CRITICAL] WORKER TIMEOUT (pid:5)
2021-11-21T16:39:35.836627+00:00 app[web.1]: [2021-11-21 16:39:35 +0000] [5] [INFO] Worker exiting (pid: 5)

Я хотел бы подчеркнуть, что таймаут не может быть вызван сложностью вычислений, поскольку задача Celery изменяет только поле boolean на ресурсе резервирования.

Для справки, служба Celery в моем docker-compose.yml выглядит следующим образом:

worker:
  container_name: celery
  build:
    context: .
    dockerfile: Dockerfile
  command: celery -A secure_my_spot.celeryconf worker --loglevel=INFO
  depends_on:
    - db
    - broker
    - redis
  restart: always

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

Вернуться на верх