在芹菜中,让多个工人处理同一个队列的目的是什么?

时间:2013-02-27 03:59:05

标签: celery task-queue celeryd celery-task

在celeryd-multi的文档中,我们找到了这个例子:

# Advanced example starting 10 workers in the background:
#   * Three of the workers processes the images and video queue
#   * Two of the workers processes the data queue with loglevel DEBUG
#   * the rest processes the default' queue.
$ celeryd-multi start 10 -l INFO -Q:1-3 images,video -Q:4,5 data
    -Q default -L:4,5 DEBUG

(从这里:http://docs.celeryproject.org/en/latest/reference/celery.bin.celeryd_multi.html#examples

为什么在单个主机上有多个工作进程处理同一个队列会有什么好处,如上例所示?这不是设置并发性的原因吗?

更具体地说,以下两行(A和B)之间是否存在实际差异?:

A:

$ celeryd-multi start 10 -c 2 -Q data

B:

$ celeryd-multi start 1 -c 20 -Q data

我担心由于我不理解这种实际差异,我错过了一些关于任务队列的宝贵知识,如果有人能够启发我,我将非常感激。

谢谢!

1 个答案:

答案 0 :(得分:8)

  

为什么拥有更多的东西会有什么好处呢?   单个主机上的一个工作程序处理相同的队列,如在   上面的例子?

答案:

  

因此,您可能希望在同一台计算机上运行多个工作器实例   节点if:

     
      
  • 您正在使用多处理池并希望并行使用消息。有些报告使用多个工作人员表现更好   实例而不是运行具有多个池的单个实例   工人。

  •   
  • 您正在使用eventlet / gevent(由于臭名昭着的GIL,也包括' threads')池,并且您希望在多个CPU上执行任务   芯

  •   

参考:http://www.quora.com/Celery-distributed-task-queue/What-is-the-difference-between-workers-and-processes