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



我在任务发布速度方面遇到了严重问题,我目前正在调试它,我认为这是Celery设置的问题。

我正在使用Django、Celery和RabbitMQ。我有一个简单的任务,发送电子邮件。这项任务有效,但速度很慢。

例如,我想在一个循环中执行10000个简单的"test_print((任务",我不能发布超过23-24/s的任务。在它轻松发布1000+/s之前。我在系统中的每一项任务都有这个问题。这可能是在我将代码移动到Djcerine(用Django代码封装的celenie项目(或服务器上发生更改后发生的(可能性较小的选项(。这是我的设置。它使用的是rabbitmqserver。

设置:

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")

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

最新更新