简体   繁体   English

芹菜多工人意外的任务执行顺序

[英]Celery multi workers unexpected task execution order

I run celery: 我经营芹菜:

celery multi start --app=myapp fast_worker 
       slow_worker
       -Q:fast_worker fast-queue      
       -Q:slow_worker slow-queue
       -c:fast_worker 1 -c:slow_worker 1
       --logfile=%n.log --pidfile=%n.pid

And celerybeat: 和celerybeat:

celery beat -A myapp

Task: 任务:

@task.periodic_task(run_every=timedelta(seconds=5), ignore_result=True)
def test_log_task_queue():
    import time
    time.sleep(10)
    print "test_log_task_queue"

Routing: 路由:

CELERY_ROUTES = {
    'myapp.tasks.test_log_task_queue': {
        'queue': 'slow-queue',
        'routing_key': 'slow-queue',
    },
}

I use rabbitMQ. 我用的是RabbitMQ。 When I open rabbitMQ admin panel, I see that my tasks are in slow-queue , but when I open logs I see task output for both workers. 当我打开rabbitMQ管理面板时,我看到我的任务处于slow-queue ,但是当我打开日志时,我看到两个工作人员的任务输出。 Why do both workers execute my tasks, even when task not in worker queue? 为什么两个工作人员都执行我的任务,即使任务不在工作队列中?

It looks like celery multi creates something like shared queues. 看起来celery multi创建了类似共享队列的东西。 To fix this problem, I added -X option: 为了解决这个问题,我添加了-X选项:

celery multi start --app=myapp fast_worker 
   slow_worker
   -Q:fast_worker fast-queue      
   -Q:slow_worker slow-queue
   -X:fast_worker slow-queue
   -X:slow_worker fast-queue
   -c:fast_worker 1 -c:slow_worker 1
   --logfile=%n.log --pidfile=%n.pid

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM