我需要从Rabbitmq中读取并在一个系统中使用Celery并行执行任务。
[2014-12-30 15:54:22,374: INFO/Worker-1] ... [2014-12-30 15:54:23,401: INFO/Worker-1] ... [2014-12-30 15:54:30,878: INFO/Worker-1] ... [2014-12-30 15:54:32,209: INFO/Worker-1] ... [2014-12-30 15:54:33,255: INFO/Worker-1] ... [2014-12-30 15:54:48,445: INFO/Worker-1] ... [2014-12-30 15:54:49,811: INFO/Worker-1] ... [2014-12-30 15:54:50,903: INFO/Worker-1] ... [2014-12-30 15:55:39,674: INFO/Worker-1] ... [2014-12-30 15:55:41,024: INFO/Worker-1] ... [2014-12-30 15:55:42,147: INFO/Worker-1] ...
它接缝只有1名工人正在运行,即一个接一个地按顺序。 我如何configuration芹菜运行多个工人并行运行?
请注意,芹菜工人和工人线程是不同的东西。 当一个工人开始时,会产生一定数量的线程。 线程的默认数量等于该机器上的核心数量。 在Linux上,您可以通过以下方式检查核心数量:
$ nproc --all
否则,你可以自己指定它,例如:
$ celery -A proj worker --loglevel=INFO --concurrency=2
请注意,在上面的例子中,只有一个工人,但有2个线程。 这并不意味着它会开始更快地消耗排队的消息 – 它将并行处理它们,但不会消耗。 所以要并行消耗你需要多于一个工人,例如:
$ celery -A proj worker -l info --concurrency=4 -n wkr1@hostname $ celery -A proj worker -l info --concurrency=2 -n wkr2@hostname $ celery -A proj worker -l info --concurrency=2 -n wkr3@hostname
请参阅芹菜文档了解更多信息
我find了这个
http://docs.celeryproject.org/en/latest/reference/celery.html?highlight=parallel
你可以在那里寻找Canvas原语 ,你可以看到如何为并行执行创build组。
类celery.group(task1 [,task2 [,task3 [,… taskN]]])创build一组要并行执行的任务。
否则,一个好办法就是去IRC频道问一些特别的问题。 通常有些人知道这很好,他们可以帮助你。
看起来你的工作人员只是运行一个进程/线程。 您可能只需要在启动worker来产生多个(并行)工作者实例时添加--concurrency或-c参数 。
celery -A proj worker -c 4