django-apscheduler
APScheduler for Django
What it is and what it does
django-apscheduler wraps APScheduler to let you define and persist scheduled jobs directly in your Django database. Instead of managing cron jobs externally or using separate task queues, you add jobs through a custom Django management command, and the package stores them using Django's ORM. You can view, edit, and manually trigger jobs from the Django admin interface, and the package maintains an execution history showing when each job ran and whether it succeeded or failed.
The trade-off is simplicity for scale: it works well for a handful of fixed-schedule tasks in smaller deployments, but it requires careful architecture in production because APScheduler has no built-in way for multiple scheduler processes to coordinate. If you run many web workers, each one starting its own scheduler, jobs will execute multiple times or be skipped. The package documents three workarounds: run a single dedicated scheduler process (recommended), implement custom remote synchronization, or switch to a message-broker-based task queue like Celery or Django-RQ.
Use it for:
- Run periodic cleanup tasks (e.g., deleting old logs or expired records) on a fixed schedule without external cron infrastructure.
- Trigger daily or weekly reports, email digests, or data exports from within Django, with execution history visible in the admin.
- Schedule one-off or recurring maintenance jobs (database optimization, cache refresh) and monitor their success from the admin interface.
- Manage simple recurring reminders or notifications without introducing a separate task queue system.
- Prototype scheduling features quickly in development before committing to a more complex distributed task system.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Adds persistent job scheduling to Django applications using APScheduler, storing scheduled tasks in the database and providing Django admin integration for job management and execution monitoring.
Yes, if you have a small number of scheduled tasks and can run a single dedicated scheduler process. The low install friction and Django admin integration make it ideal for simple use cases. No, if you need to scale horizontally across multiple worker processes, run high-frequency jobs, or require distributed task coordination—use a message-broker-based alternative like Celery instead. The aging maintenance status (685 days since last release) is a minor concern but not a blocker given the stable nature of the underlying APScheduler library.
Install
django-apscheduler on PyPI
pip
pip install django-apscheduleruv
uv add django-apschedulerpoetry
poetry add django-apschedulerInstalling django-apscheduler
Before you install
Low install friction with only two runtime dependencies (django and apscheduler). Maintenance status is aging—last release was 685 days ago, though the repository remains active with recent commits and moderate community engagement (712 stars).
License in practice
MIT license is permissive, allowing commercial and private use with minimal restrictions; you may use and modify the package freely provided you include the license notice.
Quickstart
pip install django-apscheduler
# In settings.py:
INSTALLED_APPS = (
"django_apscheduler",
)
# In a custom management command:
from apscheduler.schedulers.blocking import BlockingScheduler
from django_apscheduler.jobstores import DjangoJobStore
scheduler = BlockingScheduler()
scheduler.add_jobstore(DjangoJobStore(), "default")
scheduler.add_job(my_job, trigger=CronTrigger(second="*/10"), id="my_job")
scheduler.start()
You must run only one scheduler instance at a time; APScheduler lacks interprocess synchronization, so multiple schedulers will not coordinate job execution and may run jobs multiple times or miss executions entirely.
Verify before relying
- Whether the 685-day gap since last release indicates active maintenance or dormancy relative to Django's release cycle.
- Performance characteristics when managing large numbers of scheduled jobs or high-frequency task execution.
- Compatibility with Django deployment patterns beyond single-process schedulers (e.g., containerized or load-balanced environments).
Package facts
| License | MIT (permissive) |
| Python support | not specified |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 2 — django, apscheduler |
| Maintenance | aging — 685 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 230,494/month — #9,107 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: django_apscheduler-0.7.0-py3-none-any.whl
Keywords: django, apscheduler, django-apscheduler
Tags
More Monitoring packages
Wraps any iterable to display a real-time…
copyleft · top 100 on PyPI
opentelemetry-semantic-conventionsProvides generated Python code for…
permissive · top 100 on PyPI
opentelemetry-sdkProvides the reference implementation of the…
permissive · top 100 on PyPI
opentelemetry-apiProvides the abstract API and interfaces for…
permissive · top 100 on PyPI
opentelemetry-exporter-otlp-proto-httpExports OpenTelemetry observability data to an…
permissive · top 1,000 on PyPI
opentelemetry-instrumentationProvides automatic instrumentation commands and…
permissive · top 1,000 on PyPI
APSchedulerAPScheduler lets you schedule Python code to…
permissive · top 1,000 on PyPI
Flask-APSchedulerFlask-APScheduler integrates APScheduler with…
permissive · top 15,000 on PyPI
django-crontabIntegrates system crontab scheduling into…
permissive · top 15,000 on PyPI
aiojobsaiojobs provides a scheduler for spawning and…
permissive · top 15,000 on PyPI
dj-materialized-viewsManages PostgreSQL materialized views through a…
permissive · top 15,000 on PyPI
django-rqDjango-RQ integrates RQ (Redis Queue) with…
permissive · top 5,000 on PyPI
rq-schedulerAdds job scheduling capabilities to RQ (Redis…
permissive · top 15,000 on PyPI
schedulerAn in-process job scheduler for Python that…
copyleft · top 15,000 on PyPI
django-celery-beatStores Celery periodic task schedules in a…
permissive · top 5,000 on PyPI
django-tasks-dbA Django Tasks backend that stores and executes…
permissive · top 15,000 on PyPI