Task Guide
Task metadata is an entity stored in your database of choice and consumed by a worker. Parameters and returned data are pickled and stored as a Base64 string for compatibility. ⚠️ Keep the data as small as possible — prefer using primitive types instead of complex objects.
All operations in task/function are wrapped in a transaction.atomic
block.
If the queue is always full, deferred tasks may never get executed again.
django_firefly_tasks.decorators.task
Supports synchronous functions.
@task()
def foo():
pass
django_firefly_tasks.decorators.atask
Supports asynchronous functions.
@atask()
async def foo():
pass
⚙️ Parameters
queue (str): the queue in which the task will be placed (default =
"default"
)max_retries (int): maximum number of retries on failure (default =
0
)retry_delay (int): delay in seconds between retries (default =
120
)
How to Use
1️⃣ Define the function
def add(i: int, j: int) -> int:
return i + j
2️⃣ Decorate it
@task(queue="default", max_retries=0, retry_delay=0)
def add(i: int, j: int) -> int:
return i + j
3️⃣ Schedule the task (in views, models, serializers, forms, etc.)
task = add.schedule(1, 3)
A TaskModel
instance is returned. It stores metadata about the scheduled task.
4️⃣ Retrieve returned data after processing
task = TaskModel.objects.get(pk=task.id)
returned_data = task.returned # 4
Consumer
A consumer is required to process tasks. Use the Django management command:
./manage.py consume_tasks
To define a specific queue:
./manage.py consume_tasks --queue default
Task Restarting
You can configure task restarting with the following parameters:
max_retries
: how many times the task should retry on failureretry_delay
: delay (in seconds) between retries
Example:
@task(max_retries=20, retry_delay=100)
This will retry the task up to 20 times, waiting 100 seconds between each attempt.
Task Entity Structure
id (int): task id
func_name (str): function name with the path in dot notation
queue (str): target queue
status (str): status of the task (
created
,completed
,failed
)created (datetime): time of creation
completed (datetime): time of successful completion
failed (datetime): time of failure
not_before (datetime): task will not run before this datetime
params (any): parameters passed to the function
returned (any): value returned by the function