Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
Django Celery inspect在达到并发值时显示worker脱机_Django_Rabbitmq_Celery - Fatal编程技术网

Django Celery inspect在达到并发值时显示worker脱机

Django Celery inspect在达到并发值时显示worker脱机,django,rabbitmq,celery,Django,Rabbitmq,Celery,我们的项目使用Django运行带有芹菜/RabbitMQ的Web服务器,将任务分配给工作人员。每当一个工人有能力完成任务时(例如,并发四个有四个任务),他们就不再从flower或内置芹菜中出现 ETA:工作进程仍处于联机状态,当任务完成,工作进程低于并发值时,它将再次出现在flower and inspect中。不幸的是,我试图使用inspect的“reserved”方法来查看排队的任务,每当我看到worker时,这个方法总是空的 以下是Django设置文件中的芹菜设置: BROKER_URL

我们的项目使用Django运行带有芹菜/RabbitMQ的Web服务器,将任务分配给工作人员。每当一个工人有能力完成任务时(例如,并发四个有四个任务),他们就不再从flower或内置芹菜中出现

ETA:工作进程仍处于联机状态,当任务完成,工作进程低于并发值时,它将再次出现在flower and inspect中。不幸的是,我试图使用inspect的“reserved”方法来查看排队的任务,每当我看到worker时,这个方法总是空的

以下是Django设置文件中的芹菜设置:

BROKER_URL = 'amqp://[user]:[pw]@[host]//'

CELERY_ACCEPT_CONTENT = ['json']
CELERY_EVENT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_RESULT_BACKEND = 'amqp'
CELERY_TIMEZONE = 'US/Mountain'
CELERY_RESULT_PERSISTENT = True
CELERY_TASK_RESULT_EXPIRES = 3600 # seconds
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
CELERY_DEFAULT_QUEUE = 'tasks'
CELERY_TRACK_STARTED = True

from kombu import Queue

CELERY_QUEUES = (Queue('tasks', routing_key='task.#'),
                 Queue('frontend_tasks', routing_key='frontend.#'),
                )

CELERY_DEFAULT_ROUTING_KEY = 'task.default'
CELERY_DEFAULT_EXCHANGE = 'tasks'
芹菜版本:3.1.13

RabbitMQ版本:3.3.4-1

kombu版本:3.0.21

amqp版本:1.4.5

调用芹菜工人:

python manage.py celery worker -f c:\logs\celery.log -E -l info --settings=[proj].settings.production
更新: 将预取乘数设置为1后,即使有四个任务,我仍然可以看到工作进程。但是,我无法在worker上看到任何挂起的任务,因为它们尚未从服务器获取。有人知道我是否有办法让工作人员(出现)保持在线,并且仍然可以在队列中看到挂起的任务吗?如果将预回迁乘数设置为偶数为2,则每当工作人员有四个或更多任务时,他们都会从“我的检查/花”中退出。即使将预回迁乘数设置为2,将并发性设置为1或2(从4降低),也会导致相同的“工作进程消失”问题

提前感谢您的帮助


史蒂夫

我找到了解决这个问题的方法。通过向调用提交
-P threads
参数,我将我的工作线程更改为threaded,而不是prefork:

python manage.py celery worker -f c:\logs\celery.log -E -P threads -l info --settings=[proj].settings.production
然后,我能够正确地检查工作进程,即使它们以并发值运行。我必须确保我所有的任务都是线程安全的(舒蒂尔是主要的罪犯,一把简单的锁就解决了这个问题)

我希望这有帮助

史蒂夫