Решение проблем с тайм-аутом 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 секунд я получаю следующую ошибку в журналах:
Я хочу увеличить задержку, чтобы избежать тайм-аута.
Вот попытки, которые я безуспешно предпринимал:
Добавлена
--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.
У кого-нибудь есть решение?