【问题标题】:Celery multi workers unexpected task execution order芹菜多工人意外任务执行顺序
【发布时间】:2017-09-30 01:18:58
【问题描述】:

我经营芹菜:

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

还有 celerybeat:

celery beat -A myapp

任务:

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

路由:

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

我使用rabbitMQ。当我打开 rabbitMQ 管理面板时,我看到我的任务在 slow-queue 中,但是当我打开日志时,我看到两个工作人员的任务输出。为什么两个工作人员都执行我的任务,即使任务不在工作人员队列中?

【问题讨论】:

    标签: python django celery celerybeat


    【解决方案1】:

    看起来celery multi 创建了类似共享队列的东西。为了解决这个问题,我添加了-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
    

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 2020-10-07
      • 2019-08-01
      • 2013-02-19
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      相关资源
      最近更新 更多