У меня есть задача сельдерея:
@app.task(bind=True, soft_time_limit=FreeSWITCHConstants.EXECUTE_ATTEMPTS_LOCAL_SOFT_TIME_LIMIT)
def execute_attempt_local(self, attempt_id, provider_id, **kwargs):
print "PERF - entering execute_attempt_local"
...
, которая обрабатывается (удаленным) рабочим со следующей конфигурацией:
celery -A mycompany.web.taskapp worker n -Q execute_attempts-2 --autoscale=4,60
Эта задача порождается тысячами одновременно иИсторически завершалось в течение 1-3 с (это в основном связанная с вводом / выводом задача).
В последнее время, когда общее использование нашего приложения увеличилось, время выполнения этой задачи увеличилось в среднем до 5-8 с, и я пытаюсьчтобы понять, что занимает дополнительное время.Я заметил, что для многих задач, занимающих 5-8 секунд, ~ 4 с занимает промежуток времени между задачей, принимаемой потоком, и выполнением первой строки задачи:
[2019-09-24 13:15:16,627: DEBUG/MainProcess] Task accepted: mycompany.ivr.freeswitch.tasks.execute_attempt_local[d7585570-e0c9-4bbf-b3b1-63c8c5cd88cc] pid:7086
...
[2019-09-24 13:15:22,180: WARNING/ForkPoolWorker-60] PERF - entering execute_attempt_local
Что происходит вчто 4с?Я предполагаю, что у меня есть проблема конфигурации Celery, и где-то не хватает ресурсов для более быстрой обработки этих задач.Есть идеи, что может их замедлить?