Python + Django + Celery的发布速度非常低

时间:2018-08-07 21:16:07

标签: django rabbitmq celery django-celery djcelery

我在任务发布速度方面存在严重问题,目前正在调试它,我认为这与Celery设置有关。

我正在使用Django,Celery和RabbitMQ。我有一个简单的任务,可以发送电子邮件。该任务有效,但是非常慢。

例如,我想循环执行10000个简单的“ test_print()任务”,但发布速度不能超过23-24 / s。在此之前,它很容易发布1000 + / s。我在系统中遇到的所有任务都遇到了这个问题。自从我将代码移至Djcelery(用Django代码包装的celery项目)或服务器上发生了更改(可能的选项较少)以来,就可能发生了。这是我的设置。它使用的是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 个答案:

答案 0 :(得分:0)

问题已解决。致命的设置是broker_pool_limit = 0,它是在发布后重置连接。将其设置为默认值(10)后达到每秒500-1000