arq
Job queues in python with asyncio and redis
What it is and what it does
arq is a job queue library that lets you offload work from your main Python application to background workers using asyncio and Redis. It sits between your application and a Redis instance, allowing you to enqueue tasks that execute asynchronously on one or more worker processes. The package is designed for developers building async Python applications who need reliable background job execution without the overhead of a full message broker like RabbitMQ or Kafka.
The library is currently in maintenance-only mode, meaning it is stable and receives bug fixes and security updates but is not actively gaining new features. It supports Python 3.9 through 3.14 and has a permissive MIT license. Its two runtime dependencies—click and redis—are both widely used and well-maintained, keeping the installation footprint small.
Use it for:
- Offload long-running computations from a web request handler to execute asynchronously in the background
- Distribute batch processing tasks across multiple worker processes on the same or different machines
- Schedule periodic or one-time jobs to run at specific times without blocking the main application
- Build a microservice that consumes work items from a shared Redis queue and processes them in parallel
- Implement retry logic and error handling for tasks that may fail transiently
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
arq provides a job queue system for Python that uses asyncio and Redis to run background tasks asynchronously and distribute work across multiple workers.
Yes, if you need a lightweight async job queue backed by Redis and are comfortable with maintenance-only mode. The low install friction, permissive license, broad Python version support, and zero known vulnerabilities make it a solid choice for background task processing in async applications. Not suitable if you require active feature development or prefer a more feature-rich task queue.
Install
arq on PyPI
pip
pip install arquv
uv add arqpoetry
poetry add arqInstalling arq
Before you install
Low friction installation with only two runtime dependencies (click and redis). The package is in maintenance-only mode but remains actively maintained; the last commit was recent and the repository is not archived, suggesting stability rather than abandonment.
License in practice
MIT license is permissive, allowing use in commercial and proprietary projects with minimal restrictions beyond attribution.
Quickstart
pip install arq
from arq import create_pool
import asyncio
async def my_job(ctx):
return 'done'
async def main():
redis = await create_pool('redis://localhost')
job = await redis.enqueue_job('my_job')
asyncio.run(main())
Requires a running Redis server accessible at the configured URL; Python 3.9 or later.
Verify before relying
- Whether maintenance-only mode implies no new features or breaking changes will be accepted
- Performance characteristics and scalability limits for typical workloads
- Whether the package handles task retry logic, scheduling, or only basic queueing
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.9) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 2 — click, redis |
| Maintenance | actively maintained — 120 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 4,687,723/month — #2,254 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: arq-0.28.0-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
inngestInngest adds durable, event-driven background…
unclear · top 5,000 on PyPI
pydocketDocket is a distributed background task system…
permissive · top 5,000 on PyPI
saqSAQ is an async job queue framework that runs…
permissive · top 15,000 on PyPI
bullmqBullMQ for Python is a Redis-backed job queue…
permissive · top 5,000 on PyPI
hueyHuey is a lightweight task queue library that…
unclear · top 5,000 on PyPI
rqRQ is a Python library for queueing jobs and…
permissive · top 5,000 on PyPI
potteryPottery provides Python dict, set, list, deque,…
unclear · top 15,000 on PyPI
django-rqDjango-RQ integrates RQ (Redis Queue) with…
permissive · top 5,000 on PyPI
redis-simple-mqA lightweight message queue built on Redis that…
permissive · top 15,000 on PyPI
dramatiqDramatiq is a distributed task processing…
copyleft · top 5,000 on PyPI