【发布时间】:2014-09-25 04:21:39
【问题描述】:
我们的项目使用 Django 运行带有 Celery/RabbitMQ 的网络服务器,将任务分配给工作人员。每当一个工人有能力完成任务时(例如,四个并发有四个任务),他们就会停止从花或内置的 celery 检查中出现。
ETA:worker 仍然在线,当任务完成,worker 低于并发值时,它再次出现在花和检查中。不幸的是,我正在尝试使用检查的“保留”方法来查看排队的任务,只要我能看到工作人员,这总是空的。
这是我们在 Django 设置文件中的 Celery 设置:
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'
Celery 版本:3.1.13
RabbitMQ 版本:3.3.4-1
kombu 版本:3.0.21
amqp 版本:1.4.5
Celery worker 的调用:
python manage.py celery worker -f c:\logs\celery.log -E -l info --settings=[proj].settings.production
更新: 将预取乘数设置为 1 后,即使他们有四个任务,我仍然可以看到工作人员。但是,我在工作人员上看不到任何待处理的任务,因为它们尚未从服务器中获取。有谁知道是否有一种方法可以让工作人员(出现)在线并仍然看到队列中的待处理任务?甚至将预取乘数设置为 2 会使工作人员在有四个或更多任务时从我的检查/花中退出。即使将预取乘数设置为 2 并将并发设置为 1 或 2(从 4 下调)也会导致相同的“工作人员消失”问题。
提前感谢您的帮助,
史蒂夫
【问题讨论】: