django-dbtasks
Database backend and runner for Django tasks (new in 6.0).
django-dbtasks is tested on PostgreSQL, SQLite, and MySQL for versions of Python back to 3.12, including the free-threading builds.
Note when using SQLite it is recommended to set OPTIONS["transaction_mode"] = "IMMEDIATE" - see https://forum.djangoproject.com/t/sqlite-and-database-is-locked-error/26994 for more information.
Quickstart
Install the django-dbtasks package from PyPI, and configure your TASKS setting as follows:
TASKS = {
"default": {
"BACKEND": "dbtasks.backend.DatabaseBackend",
"OPTIONS": {
# Set this to True to execute tasks immediately (no need for a runner).
"immediate": False,
# Whether to send `task_enqueued`, `task_started`, and `task_finished`.
"signals": True,
# How long to retain ScheduledTasks in the database. Forever if not set.
"retain": datetime.timedelta(days=7),
# Tasks to run periodically.
"periodic": {
# Runs at 3:30am every Monday through Friday.
"myproject.tasks.maintenance": "30 3 * * 1-5",
},
},
},
}
Runner
django-dbtasks includes a dedicated taskrunner management command:
usage: manage.py taskrunner [-h] [-w WORKERS] [-i WORKER_ID] [--backend BACKEND]
[--delay DELAY] [--no-periodic]
It is also straightforward to run the runner in a thread of its own:
runner = Runner(workers=4, worker_id="in-process")
t = threading.Thread(target=runner.run)
t.start()
...
runner.stop()
t.join()
django-dbtasks itself is tested on free-threading builds of Python 3.13 and 3.14, but compatibility will depend on your database driver and other packages.
Periodic Tasks
As shown in the quickstart, periodic tasks are specified as a mapping in the backend OPTIONS under the periodic key. The keys of the mapping should be dotted paths to the tasks, and the values should either be a string in crontab format, or an instance of dbtasks.Periodic. Using a dbtasks.Periodic allows you to specify args and kwargs (as values or callables) that will be passed to the task, along with a custom retain duration.
Logging
Be sure to add a dbtasks logger to your LOGGING setting:
LOGGING = {
...
"loggers": {
"dbtasks": {
"handlers": ["console"],
"level": "INFO",
},
},
}
Testing
There is a RunnerTestCase that starts a runner for the duration of a test suite. See test_tasks.py for example usage.
Extras
django-dbtasks comes with a number of optional features for integration into various environments.
dbtasks.contrib.serve
This is a Django app you can add to INSTALLED_APPS to enable a serve management command that runs your site in a Granian server, with options to also start an integrated task runner. For instance, the following command will serve your site on 127.0.0.1:8000, start a runner, and reload your server (and tasks!) on code changes:
manage.py serve -k -r
Running an integrated task runner (with -k/--tasks) is not a great idea in production, but is excellent for development. Granian is a production-caliber server, so you can also use serve in production alongside a separate taskrunner command.
You can install the django-dbtasks[serve] extra to include Granian automatically.
uWSGI mule
You can run a uWSGI mule that starts a task runner by passing --mule=dbtasks.contrib.mule:taskrunner or specifying <mule>dbtasks.contrib.mule:taskrunner</mule> in your XML config.
Release files for django-dbtasks 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django_dbtasks-0.4.0.tar.gz | 15.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_dbtasks-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 37.2 kB
Release files / django_dbtasks-0.4.0.tar.gz
| Download URL | django_dbtasks-0.4.0.tar.gz |
|---|---|
| Size | 15.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e741cb84217b2be9bead22da8255a8a082058adf73b7bbe7144b2ca714844958
|
|
BLAKE2b-256 checksum How to use checksums |
0776a38da7031a6aa5d5ac75efd95e63e9cab5e657cac981e0b1a218a2084ec7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / django_dbtasks-0.4.0-py3-none-any.whl
| Download URL | django_dbtasks-0.4.0-py3-none-any.whl |
|---|---|
| Size | 22.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
20101aa7fdf7cce08eb35f58dce42101a9dcc03ff9353ed7ac886f674cac460e
|
|
BLAKE2b-256 checksum How to use checksums |
eb0ae5650258a12be0abd5ab61b1363c7c649500f8d3e6946a10da84bd02837a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|