Command Palette

Search for a command to run...

All patterns
Scalability

Async Jobs & Queue

Problem

Long-running LLM tasks (document summarisation, batch embedding, multi-agent research) block request threads and time out.

Pattern

Submit work to a queue. Workers process jobs asynchronously. Clients poll or receive a webhook/SSE when done.

Implementation
queue.pypython
import redis
from rq import Queue

q = Queue(connection=redis.from_url("redis://localhost:6379"))

@app.post("/api/summarise")
def summarise(req):
    job = q.enqueue(summarise_document, req.doc_id, timeout=600)
    return {"job_id": job.id, "status": "queued"}

@app.get("/api/jobs/{job_id}")
def job_status(job_id):
    job = q.fetch_job(job_id)
    if job.is_finished:
        return {"status": "done", "result": job.result}
    if job.is_failed:
        return {"status": "failed", "error": str(job.exc_info)}
    return {"status": "running"}
Trade-offs
  • Unblocks request threads
  • Handles long jobs gracefully
  • Adds infra (queue, workers)
  • UX needs polling or push
Production checklist
  • Idempotent jobs
  • Per-job timeout and retry
  • Dead letter queue
  • Worker autoscaling
  • Webhook or SSE for completion
  • Cost accounting per job