Сельдерей (Джанго) Ограничение скорости

Я использую Celery для обработки нескольких задач интеллектуального анализа данных. Одна из этих задач подключается к удаленной службе, которая допускает не более 10 одновременных подключений на пользователя (или, другими словами, МОЖЕТ превышать 10 подключений в глобальном масштабе, но НЕ МОЖЕТ превышать 10 подключений для каждого отдельного задания).

Я ДУМАЮ Token Bucket (ограничение скорости) — это то, что я Я ищу, но я не могу найти его реализацию.


person NFicano    schedule 31.01.2011    source источник


Ответы (3)


Celery имеет ограничение скорости и содержит общую реализацию ведра токенов.

Установите ограничения скорости для задач: http://docs.celeryproject.org/en/latest/userguide/tasks.html#Task.rate_limit

Или во время выполнения:

http://docs.celeryproject.org/en/latest/userguide/workers.html#rate-limits

Реализация ведра токенов находится в Kombu

person asksol    schedule 01.02.2011
comment
Увы, это не работает должным образом, потому что это для каждой очереди. Здесь я нашел лучшее решение: stackoverflow.com/a/66161773/64911 - person mlissner; 11.02.2021

После долгих исследований я обнаружил, что Celery явно не предоставляет способа ограничить количество одновременных экземпляров, подобных этому, и, кроме того, это обычно считается плохой практикой.

Лучшим решением будет одновременная загрузка в рамках одной задачи и использование Redis или Memcached для хранения и распространения для обработки других задач.

person NFicano    schedule 01.02.2011

Хотя это может быть плохой практикой, вы можете использовать выделенную очередь и ограничить работника, например:

    # ./manage.py celery worker -Q another_queue -c 10
person André B.    schedule 10.12.2012
comment
Я не думаю, что это плохая практика. Это очередь с другим шаблоном использования и потребления, поэтому... для меня имеет смысл, если это другая очередь. - person jjmontes; 05.03.2021