saq
Distributed Python job queue with asyncio and redis
What it is and what it does
SAQ is a job queueing framework designed for async Python applications. It lets you offload long-running or expensive tasks (email sending, database queries, data analysis) to background workers, keeping your main application responsive. Jobs are stored in Redis or PostgreSQL and executed by worker processes you control.
Unlike synchronous queue libraries, SAQ is built on asyncio from the ground up, making it naturally fast for async workloads. It supports scheduled jobs via cron expressions (using croniter), lifecycle hooks (startup, shutdown, before/after job processing), and includes a web UI for monitoring queue health and worker status. Configuration is declarative—you define a settings dictionary with your functions, concurrency level, and optional cron jobs, then start workers from the command line.
Use it for:
- Schedule email notifications or SMS alerts to run asynchronously without blocking the main request.
- Execute expensive database queries or reports in the background and retrieve results later.
- Run periodic maintenance tasks (cleanup, aggregation, backups) on a cron schedule.
- Distribute compute-heavy data analysis across multiple worker processes.
- Monitor job queue health and worker status via the built-in web dashboard.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
SAQ is an async job queue framework that runs background tasks using asyncio, backed by Redis or PostgreSQL, with optional cron scheduling and a web monitoring UI.
Yes. SAQ is production-ready (Development Status 5), actively maintained, has no known vulnerabilities, and offers low install friction. Choose it if you need async job queueing with Redis or PostgreSQL backing and want simpler setup than ARQ with better latency. Not suitable if you require synchronous-only job processing or don't have a Redis/PostgreSQL instance available.
Install
saq on PyPI
pip
pip install saquv
uv add saqpoetry
poetry add saqInstalling saq
Before you install
Low install friction with a pure-Python wheel. Actively maintained with a recent release and 878 repository stars. Single runtime dependency (croniter) keeps the core lightweight.
License in practice
MIT license is permissive; you can use, modify, and distribute SAQ freely in commercial and private projects with minimal restrictions.
Quickstart
pip install saq[redis]
from saq import Queue
queue = Queue.from_url("redis://localhost")
await queue.enqueue("my_function", arg=value)
Requires a running Redis or PostgreSQL instance; asyncio-compatible Python environment.
Verify before relying
- Whether redis-py >= 4.2 is automatically installed by the saq[redis] extra or must be specified separately.
- Performance comparison claims ('8x faster than ARQ', '< 5ms latency') lack independent verification in the fact sheet.
- Exact Python version floor and whether all listed versions (3.9–3.13) are actively tested.
Package facts
| License | MIT (permissive) |
| Python support | not specified |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 1 — croniter |
| Maintenance | actively maintained — 85 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 225,253/month — #9,224 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: saq-0.26.4-py3-none-any.whl
Tags
More Python Modules packages
Converts domain names between Unicode and…
permissive · top 100 on PyPI
setuptoolsSetuptools is a Python build backend and…
permissive · top 100 on PyPI
PyYAMLPyYAML parses and emits YAML 1.1 data format,…
permissive · top 100 on PyPI
pydanticPydantic validates Python data structures…
permissive · top 100 on PyPI
annotated-typesProvides reusable metadata objects for use with…
permissive · top 100 on PyPI
typing-inspectionProvides runtime tools to inspect and…
permissive · top 100 on PyPI
arqarq provides a job queue system for Python that…
permissive · top 5,000 on PyPI
pgqueuerPgQueuer turns PostgreSQL into a background job…
permissive · top 15,000 on PyPI
rqRQ is a Python library for queueing jobs and…
permissive · top 5,000 on PyPI
rq-schedulerAdds job scheduling capabilities to RQ (Redis…
permissive · top 15,000 on PyPI
bullmqBullMQ for Python is a Redis-backed job queue…
permissive · top 5,000 on PyPI
django-rqDjango-RQ integrates RQ (Redis Queue) with…
permissive · top 5,000 on PyPI
rq-dashboardA Flask-based web dashboard for monitoring RQ…
permissive · top 15,000 on PyPI
hueyHuey is a lightweight task queue library that…
unclear · top 5,000 on PyPI
redis-simple-mqA lightweight message queue built on Redis that…
permissive · top 15,000 on PyPI
faktoryA Python worker and client library for Faktory,…
permissive · top 15,000 on PyPI