Using a task queue¶
To handle background tasks like sending notifications, argus supports a task queue out of the box: django-tasks, defaulting to using a database backed queue.
Control it by changing the TASKS setting.
How and where the queue is stored depends on storage backends. Argus uses
django_tasks_db.DatabaseBackend by default.
django_tasks.backends.immediate.ImmediateBackend¶
Known as django.tasks.backends.immediate.ImmediateBackend in Django 6.0.
This, in effect, turns the task queue off, all tasks are executed as soon as they are received. Recommended for development.
django_tasks.backends.dummy.DummyBackend¶
Known as django.tasks.backends.dummy.DummyBackend in Django 6.0.
This backend is meant for unit testing. Tasks are queued up in memory but not executed.
django_tasks_db.DatabaseBackend¶
Pypi: https://pypi.org/project/django-tasks-db/
This backend needs a table in the database, and this table is added by default when installing Argus.
In addition it needs at least one worker process to read that table and execute
the tasks. A worker CLI program is supplied: the management command
db_worker. See Wrangling worker processes.
Completed tasks are left in the database. To prune old task results, run the
management command prune_db_task_results periodically (e.g. via a cron
job). See Wrangling worker processes.
django_tasks_rq.RQBackend¶
Pypi: https://pypi.org/project/django-tasks-rq/
This backend stores its task in redis queue via the
library django-rq. You can add the
necessary extra dependencies via pip install django-rq, or via pip
install argus-server[rq] when installing for the first time.
For configuration of rq see django-rq’s README.
In addition it needs at least one worker process to read that table and execute
the tasks. A worker CLI program is supplied: the management command
rqworker. See Wrangling worker processes.
django_tasks_local.ThreadPoolBackend¶
Pypi: https://pypi.org/project/django-tasks-local/
An alternative to django_tasks.backends.immediate.ImmediateBackend.
For processing the queue continously while not blocking. Tasks are stored in
memory and will not survive a reboot.
Other storage backends¶
Many of these are very recent, search for “django-tasks” on PyPi for more.
Scheduling tasks¶
While cron-jobs can be run outside of argus, with stored tasks cron-jobs can be defined from within argus.
django-crontask¶
Pypi: https://pypi.org/project/django-crontask/
For processing periodic tasks.
In addition it needs at least one worker process to read that table and execute
the tasks. A worker CLI program is supplied: the management command
crontask. See Wrangling worker processes.
Wrangling worker processes¶
Queue backends that require an additional worker process typically solve this by supplying a managment command that needs to be run supervised.
Relevant supervising systems are systemd, openrc or runit for a VM
or on bare metal, or supervisord if running multiple processes in the same
docker container. If running with multiple containers or pods (like with
kubernetes), this command can be run in a separate container/pod.