Решение проблем с тайм-аутом Celery на Heroku: 504 ошибки для долго выполняющихся асинхронных задач

У меня есть приложение Django v5.0.6 (Python v3.12), в которое я интегрировал Celery v5.4 для выполнения асинхронных задач, таких как генерация изображений через OpenAI API, которая занимает около 2 минут.

Вся установка развернута на Heroku. Вот содержимое моего Procfile:

web: gunicorn mngrs_backend.wsgi --timeout 600
worker: celery -A mngrs_backend worker -l info --time-limit=7200

Однако через 30 секунд я получаю следующую ошибку в журналах:

Heroku logs

Я хочу увеличить задержку, чтобы избежать тайм-аута.

Вот попытки, которые я безуспешно предпринимал:

  • Добавлена --timeout 600 в команду gunicorn в Procfile

  • Добавлена --time-limit=7200 в команду сельдерея в Procfile

  • Добавили таймаут для запроса API: requests.post(url, json=payload, headers=headers, timeout=600)

  • Изменили конфигурацию в celery.py

      app = Celery("mngrs_backend")
      app.conf.update(
          task_soft_time_limit=60 * 10,  
          task_time_limit=60 * 12,  
      )
    
  • Добавлено в проект settings:

      CELERY_BROKER_TRANSPORT_OPTIONS = {
          "visibility_timeout": 60 * 60 * 2,  # 2 hours
      }
    

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

У кого-нибудь есть решение?

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