Django¶
# myapp/tasks.py
from roost import Roost, job
roost = Roost("postgresql://...")
@job("resize_image")
def resize_image(image_id: int) -> None:
...
Inside a Django view, use the active connection so the job is committed inside Django’s atomic block:
from django.db import transaction, connection
from myapp.tasks import roost, resize_image
def upload(request):
with transaction.atomic():
image = Image.objects.create(...)
# Django's `connection.connection` is the underlying psycopg connection.
roost.enqueue(resize_image, args={"image_id": image.id}, conn=connection.connection)
return HttpResponse("ok")
Run a worker:
roost run --module myapp.tasks