Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In celery, what would be the purpose of having multiple workers process the same queue?

In the documentation for celeryd-multi, we find this example:

# 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

( From here: http://docs.celeryproject.org/en/latest/reference/celery.bin.celeryd_multi.html#examples )

What would be a practical example of why it would be good to have more than one worker on a single host process the same queue, as in the above example? Isn't that what setting the concurrency is for?

More specifically, would there be any practical difference between the following two lines (A and B)?:

A:

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

B:

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

I am concerned that I am missing some valuable bit of knowledge about task queues by my not understanding this practical difference, and I would greatly appreciate if somebody could enlighten me.

Thanks!

like image 439
chaimp Avatar asked Feb 27 '13 03:02

chaimp


People also ask

How do you make multiple workers with celery?

You probably just need to add the --concurrency or -c argument when starting the worker to spawn multiple (parallel) worker instances. Show activity on this post. You can look for Canvas primitives there you can see how to make groups for parallel execution. class celery.

What is concurrency in celery?

As for --concurrency celery by default uses multiprocessing to perform concurrent execution of tasks. The number of worker processes/threads can be changed using the --concurrency argument and defaults to the number of available CPU's if not set.

How does celery task queue work?

Celery communicates via messages, usually using a broker to mediate between clients and workers. To initiate a task, the Celery client adds a message to the queue, and the broker then delivers that message to a worker. The most commonly used brokers are Redis and RabbitMQ.

What are workers in celery?

When you run a celery worker, it creates one parent process to manage the running tasks. This process handles the book keeping features like sending/receiving queue messages, registering tasks, killing hung tasks, tracking status, etc.


1 Answers

What would be a practical example of why it would be good to have more than one worker on a single host process the same queue, as in the above example?

Answer:

So, you may want to run multiple worker instances on the same machine node if:

  • You're using the multiprocessing pool and want to consume messages in parallel. Some report better performance using multiple worker instances instead of running a single instance with many pool workers.

  • You're using the eventlet/gevent (and due to the infamous GIL, also the 'threads') pool), and you want to execute tasks on multiple CPU cores.

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

like image 77
Tyler Liu Avatar answered Sep 18 '22 03:09

Tyler Liu