Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python+;Django+;芹菜的出版速度很慢_Django_Rabbitmq_Celery_Django Celery_Djcelery - Fatal编程技术网

Python+;Django+;芹菜的出版速度很慢

Python+;Django+;芹菜的出版速度很慢,django,rabbitmq,celery,django-celery,djcelery,Django,Rabbitmq,Celery,Django Celery,Djcelery,我在任务发布速度方面遇到了严重的问题,目前正在进行调试,我认为这是芹菜设置的问题 我用的是Django,芹菜和兔肉。我有一个发送电子邮件的简单任务。这项任务可行,但速度很慢 例如,我想在一个循环中执行10000个简单的“test_print()任务”,我发布的速度不能超过23-24/s。在它轻松发布1000+/s之前。我在系统中的每项任务中都遇到了这个问题。这可能是因为我将代码移动到了Django代码的包装芹菜项目(wrapped芹菜项目)或者服务器上发生了更改(不太可能的选项)。这是我的设置。

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

我用的是Django,芹菜和兔肉。我有一个发送电子邮件的简单任务。这项任务可行,但速度很慢

例如,我想在一个循环中执行10000个简单的“test_print()任务”,我发布的速度不能超过23-24/s。在它轻松发布1000+/s之前。我在系统中的每项任务中都遇到了这个问题。这可能是因为我将代码移动到了Django代码的包装芹菜项目(wrapped芹菜项目)或者服务器上发生了更改(不太可能的选项)。这是我的设置。它正在使用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")

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

你确定这不是由这段代码时间引起的吗?睡眠(0.1)?不,这只是调试的测试任务,不是执行时间问题,而是消息发布速度慢,但你刚才说发布速度是23秒?这可能是由于延误造成的吗?执行时间比打印最后一条消息的时间早得多?