Django Celery Rate Limit не работает должным образом - PullRequest
0 голосов
/ 16 ноября 2018

Я использую приведенную ниже команду для создания одного работника:

celery -A proj worker -l info --concurrency=50 -Q celery,token_1 -n token_1

И в своей задаче я установил ограничение скорости на 4000/m.

Однако, когда я начал запускать коллекцию, я заметил, что средняя обработанная задача составляет около 10-20/s (с включенным правилом ограничения скорости 4000/m). Затем я удалил правило ограничения скорости, теперь скорость выполнения задач приближается к 60 / с.

Я в замешательстве, так как мой предел скорости равен 4000/m, что относительно 65/s. Почему это наконец идет просто 10-20/s ????? (Я уже установил 50 потоков для рабочего ....)

1 Ответ

0 голосов
/ 19 ноября 2018

Вы не понимаете, как действуют ограничения скорости в сельдерее. 'Согласно документации по версии 4.2 :

Пределы скорости можно указать в секундах, минутах или часах, добавив «/ s» `, « / m » или « / h » к стоимости. Задачи будут равномерно распределены в течение указанного периода времени.

Пример: “100/m” (сто заданий в минуту). Это обеспечит минимальную задержку в 600 мс между запуском двух задач на одном и том же рабочем экземпляре.

По сути, сельдерей добавлял вынужденную задержку между вашими заданиями. Поскольку каждая задача уже выполнялась примерно за 16 мс (1/60 секунды), добавление еще одной вынужденной задержки в 16 мс между задачами уменьшило скорость, с которой они будут обрабатываться.

...