Я использую Heroku для своего проекта Django, который работает на сервере daphne
. А также у меня есть работник из сельдерея, который выполняет задачи параллельно, чтобы уменьшить время отклика.
Ниже мой Procfile
web: daphne myproject.asgi:application --port $PORT --bind 0.0.0.0 -v 0
worker: celery worker -A myproject --loglevel=debug --concurrency=8
Сценарий: Мне нужно сгенерировать оператор, используяданные баланса за последние 24 месяца.
Для этого у меня есть две конечные точки
- GET BALANCE - выбор баланса за 24 месяца ( считается каждый месяц)в качестве задачи и 24 задачи выполняются с использованием Celery Worker *
- GENERATE STATEMENT - Генерировать оператор для данных за 24 месяца (этот API вызывается сразу после GET BALANCE API)
Если я тестирую одну компанию, то для первого API уходит 15-20 секунд. Но если я тестирую для двух или более компаний (используя нагрузочное тестирование), сначала проходит только одна компания, а другие терпят неудачу из-за проблемы HEROKU 30 Seconds Timeout
Например, для 5 компаний:
- C1 - для завершения 15 секунд - Pass
- C2 - для завершения 27 секунд - Pass
- C3- для завершения требуется 43 секунды - Время ожидания
- C4 - для завершения 48 секунд - Время ожидания
- C5 - для завершения 55 секунд - Тайм-аут
Я думаю, что проблема связана с очередью заданий и HEROKU Timeout. Но я не могу отправить ответ клиенту в GET BALANCE вызове до завершения задания, потому что в следующую секунду мне нужно сгенерировать оператор.
Также я попыталсяувеличение рабочего лимита, но это работает не более чем для 2 или 3 компаний.
Пожалуйста, предложите мне какой-нибудь способ, чтобы я мог избавиться от проблемы тайм-аута