Python + Django + Celery, очень низкая скорость публикации

У меня серьезные проблемы со скоростью публикации задач, и в настоящее время я работаю над ее устранением, я думаю, что это проблема с настройками сельдерея.

1 голос за избрание 3 Я использую Django, Celery и RabbitMQ. У меня есть простая задача, которая отправляет электронные письма. Эта задача работает, но она очень медленная.

Например, я хочу выполнить 10000 простых задач test_print() в цикле, я не могу опубликовать более 23-24/ с. Перед этим легко опубликовать 1000+/ с. У меня возникла эта проблема с КАЖДОЙ задачей в системе. Это могло произойти после того, как я переместил свой код в Djcelery(обернутый проект сельдерея с кодом django) или что-то изменилось на сервере (менее вероятный вариант). Вот мои настройки, может быть, вы, ребята, поняли бы, в чем может быть проблема. Он использует сервер rabbitmq.

настройки:

CELERY_BROKER_POOL_LIMIT=0
CELERY_CELERYD_PREFETCH_MULTIPLIER=1
CELERY_BROKER_CONNECTION_TIMEOUT=20
CELERY_BROKER_CONNECTION_RETRY=True
CELERY_BROKER_CONNECTION_MAX_RETRIES=100
CELERY_BROKER_HEARTBEAT=10
CELERY_TASK_SEND_SENT_EVENT =True
CELERY_CELERYD_SEND_EVENTS  =True
CELERY_RESULT_BACKEND='rpc://'
CELERY_CELERYD_MAX_TASKS_PER_CHILD=500
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'


CELERY_TASK_ROUTES= {
    'parse_x.*': {
        'queue': 'parse_x',
        'routing_key': 'parse_x',
        },...
}

задачи:

@shared_task(name="solicitor_tracker.test_print")
def test_print(i):
    print(i)
    time.sleep(0.1)


@shared_task(name="setup_queue.test_print_task_setup_queue",acks_late=False, 
autoretry_for=(Exception,), retry_backoff=True)
def redirection_check_setup_queue():
    for i in range(0,100000):
        test_print.apply_async([i],queue="lawsociety_parse")

1 ответ

Проблема решена. Смертельный параметр был broker_pool_limit=0, он сбрасывал подключения после публикации. После установки значения по умолчанию (10) он достиг 500-1000 в секунду

Другие вопросы по тегам