Skip to content

Django command to run celery (worker, beat, flower) with automatically reboot server after changing files

License

Notifications You must be signed in to change notification settings

Friskes/celery-starter

Repository files navigation

Django command to run celery (worker, beat, flower) with automatically reboot server after changing files

Project Status
CI/CD Latest Release
Quality Coverage
Package PyPI - Version PyPI - Support Python Versions Project PyPI - Downloads
Meta types - Mypy License - MIT code style - Ruff

Benefits of using this cli

  1. The ability to run up to three servers (worker, beat, flower) simultaneously in one terminal, instead of running by default in three different terminals.
  2. Automatic reboot of these servers when your codebase changes.

Install

  1. Install package

    pip install celery-starter
  2. Add app name to INSTALLED_APPS

    INSTALLED_APPS = [
        'celery_starter',
    ]

Command to run the program:

python manage.py runcelery

Arguments can be passed in any order, it doesn't matter.

Optional Arguments:

-h or --help Show help message.
-w <cmd> or --worker <cmd> Full command line to run worker or options that extend the default command line.
-b <cmd> or --beat <cmd> Full command line to run beat or options that extend the default command line.
-f <cmd> or --flower <cmd> Full command line to run flower or options that extend the default command line.
-eb or --exclude_beat Excludes the beat server at startup.
-ef or --exclude_flower Excludes the flower server at startup.
-d or --debug Displays information about successful/unsuccessful completion of processes.

To stopped program pressing the keyboard shortcut CTRL+C

Examples of Commands

default commands:

# worker cmd
# (WARNING) Note that the default pool is solo,
# because of this, all tasks will be performed sequentially,
# to get parallelism, install one of the libraries [gevent | eventlet]
# and redefine the default pool in cmd.
celery -A <CELERY_APP> worker -E -l INFO -P solo

# beat cmd
celery -A <CELERY_APP> beat --pidfile=celerybeat.pid -l INFO

# flower cmd
celery --broker=redis://localhost:6379// flower -A <CELERY_APP> --url_prefix=flower

valid commands:

# redefining the -A and -P parameter
# and adding a new --broker parameter to the default worker command
python manage.py runcelery -w "-A <CELERY_APP> -P gevent --broker=redis://localhost:6379//"

# complete replacement of the default worker command with the passed command
python manage.py runcelery -w "celery -A <CELERY_APP> worker"

Working with beat and flower commands works in a similar way.

Contributing

We would love you to contribute to celery-starter, pull requests are very welcome! Please see CONTRIBUTING.md for more information.