skillfed

django-apscheduler

APScheduler for Django

django-apscheduler v0.7.0 230.5K downloads/30d#9,107 on PyPI712
Permissive license MIT AGING released

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-apscheduler

uv

uv add django-apscheduler

poetry

poetry add django-apscheduler

Installing 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

Development Status :: 4 - BetaEnvironment :: Web EnvironmentFramework :: DjangoFramework :: Django :: 4.2Framework :: Django :: 5.0Framework :: Django :: 5.1Intended Audience :: DevelopersLicense :: OSI Approved :: MIT LicenseOperating System :: OS IndependentProgramming Language :: PythonProgramming Language :: Python :: 3Programming Language :: Python :: 3 :: OnlyProgramming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.9

Tags

django background job schedulingpersistent task scheduler djangoapscheduler django integrationdjango cron jobs databasescheduled tasks django admindjango job store databaserecurring tasks django
django-integrationtask-schedulingdatabase-backed

More Monitoring packages

tqdm

Wraps any iterable to display a real-time…

copyleft · top 100 on PyPI

opentelemetry-semantic-conventions

Provides generated Python code for…

permissive · top 100 on PyPI

opentelemetry-sdk

Provides the reference implementation of the…

permissive · top 100 on PyPI

opentelemetry-api

Provides the abstract API and interfaces for…

permissive · top 100 on PyPI

opentelemetry-exporter-otlp-proto-http

Exports OpenTelemetry observability data to an…

permissive · top 1,000 on PyPI

opentelemetry-instrumentation

Provides automatic instrumentation commands and…

permissive · top 1,000 on PyPI

APScheduler

APScheduler lets you schedule Python code to…

permissive · top 1,000 on PyPI

Flask-APScheduler

Flask-APScheduler integrates APScheduler with…

permissive · top 15,000 on PyPI

django-crontab

Integrates system crontab scheduling into…

permissive · top 15,000 on PyPI

aiojobs

aiojobs provides a scheduler for spawning and…

permissive · top 15,000 on PyPI

dj-materialized-views

Manages PostgreSQL materialized views through a…

permissive · top 15,000 on PyPI

django-rq

Django-RQ integrates RQ (Redis Queue) with…

permissive · top 5,000 on PyPI

rq-scheduler

Adds job scheduling capabilities to RQ (Redis…

permissive · top 15,000 on PyPI

scheduler

An in-process job scheduler for Python that…

copyleft · top 15,000 on PyPI

django-celery-beat

Stores Celery periodic task schedules in a…

permissive · top 5,000 on PyPI

django-tasks-db

A Django Tasks backend that stores and executes…

permissive · top 15,000 on PyPI