Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Celery worker and beat load in one command

Is there a way to start the celery worker and beat in one command? I would like to add celery to my automated deployment procedure with Fabric.

I am currently running:

celery -A prj worker -B

followed by

celery -A prj beat -l info -S django

However, the first command starts the worker and does not allow the next command (starting the beat) to be run because the worker start-up messages appear.

Is there a way to avoid the start-up messages appearing? Or do both of these actions in one command? Perhaps there is even a way to start these from my Django config?

Thanks!

like image 280
zubhav Avatar asked Mar 02 '17 21:03

zubhav


People also ask

What is celery beat and celery worker?

Celery workers are worker processes that run tasks independently from one another and outside the context of your main service. Celery beat is a scheduler that orchestrates when to run tasks. You can use it to schedule periodic tasks as well.

How do you run Celerybeat?

This command has used for start the celery beat. Firstly add the django_celery_beat module in installed apps in settings file. And then apply the django migrate command, this will create the tables in admin pannel. After completing all the process like in celery file and create task in tasks.py .

Why do you beat celery?

celery beat is a scheduler; It kicks off tasks at regular intervals, that are then executed by available worker nodes in the cluster. By default the entries are taken from the beat_schedule setting, but custom stores can also be used, like storing the entries in a SQL database.


1 Answers

Celery allows for you to run the worker and beat in the same process (mostly used for development purposes). Check out the help for celery worker:

> celery worker -h

...

Embedded Beat Options:
  -B, --beat            Also run the celery beat periodic task scheduler. Please note that there must only be
                        one instance of this service. .. note:: -B is meant to be used for development
                        purposes. For production environment, you need to start celery beat separately.
  -s SCHEDULE_FILENAME, --schedule-filename SCHEDULE_FILENAME, --schedule SCHEDULE_FILENAME
                        Path to the schedule database if running with the -B option. Defaults to celerybeat-
                        schedule. The extension ".db" may be appended to the filename. Apply optimization
                        profile. Supported: default, fair
  --scheduler SCHEDULER
                        Scheduler class to use. Default is celery.beat.PersistentScheduler

So the combined command, including your use of the django scheduler, would be the following:

celery -A prj worker --beat --scheduler django --loglevel=info
like image 196
Peter Huitsing Avatar answered Oct 14 '22 03:10

Peter Huitsing