scheduler
A simple in-process python scheduler library with asyncio, threading and timezone support.
What it is and what it does
Scheduler is a lightweight, in-process job scheduling library that lets you define and execute tasks on recurring or one-time schedules without external dependencies like Celery or APScheduler. It supports both asyncio and threading models, making it suitable for embedding directly into Python applications. You define jobs using a fluent API (e.g., `schedule.daily()`, `schedule.weekly()`, `schedule.cyclic()`), then call `exec_jobs()` periodically to run pending tasks. The library handles timezone-aware scheduling, job prioritization, tagging, and batching.
The package is designed for scenarios where you want scheduling logic inside your own process rather than delegating to a separate service. It depends only on typeguard for runtime type checking and supports Python 3.10 through 3.14. The codebase is actively maintained (latest release in February 2026) and includes high test coverage. It's classified as Beta but has been in development since late 2021.
Use it for:
- Schedule periodic background tasks (data cleanup, report generation) within a web application or service without external job queues.
- Implement recurring asyncio tasks with timezone support in async applications.
- Define complex scheduling rules (e.g., 'run every Monday at 4:30 PM in a specific timezone') with a readable API.
- Batch and prioritize multiple jobs, then execute them in a controlled order within your own event loop.
- Build lightweight automation scripts that need to run tasks on fixed intervals or specific dates without external dependencies.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
An in-process job scheduler for Python that supports asyncio, threading, and timezone-aware execution with flexible scheduling rules (cyclic intervals, fixed times, weekdays, dates, weights, offsets, and execution counts).
Yes, if you need in-process job scheduling without external services and can accept the LGPL-3.0 copyleft license. Low install friction, active maintenance, no known vulnerabilities, and support for modern Python versions make it a solid choice for embedded scheduling. Not suitable if you require a proprietary license or need distributed scheduling across multiple processes.
Install
scheduler on PyPI
pip
pip install scheduleruv
uv add schedulerpoetry
poetry add schedulerInstalling scheduler
Before you install
Low friction install with a single runtime dependency (typeguard). Actively maintained with a recent release (180 days ago) and supports current Python versions (3.10–3.14).
License in practice
Licensed under LGPL-3.0-only (copyleft). Derivative works and modifications must be distributed under the same license; proprietary use requires careful review of your distribution model.
Quickstart
pip install scheduler
from scheduler import Scheduler
from scheduler.trigger import Monday
import datetime as dt
schedule = Scheduler()
schedule.cyclic(dt.timedelta(minutes=10), lambda: print('task'))
schedule.weekly(Monday(), lambda: print('task'))
schedule.exec_jobs() # Call periodically in your event loop
Requires Python 3.10 or later. For asyncio scheduling, you must integrate exec_jobs() calls into your own event loop or threading model.
Verify before relying
- Whether the scheduler handles missed job executions or drift over long-running processes.
- Performance characteristics under high job counts or rapid scheduling changes.
- How job prioritization interacts with asyncio vs. threading execution models in practice.
Package facts
| License | LGPL-3.0-only (copyleft) |
| Python support | supports the current Python release (>=3.10) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 1 — typeguard |
| Maintenance | actively maintained — 180 days since the last release |
| First released | |
| Downloads | 104,078/month — #12,769 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: scheduler-0.8.11-py3-none-any.whl
Keywords: scheduler, schedule, asyncio, threading, datetime, date, time, timedelta, timezone, timing
Tags
More Libraries packages
urllib3 is an HTTP client library that provides…
permissive · top 100 on PyPI
requestsRequests is a Python HTTP library that…
permissive · top 100 on PyPI
pluggyPluggy provides a plugin system that lets you…
permissive · top 100 on PyPI
python-dateutilProvides parsing, arithmetic, and recurrence…
permissive · top 100 on PyPI
sixSix provides utility functions to write Python…
permissive · top 100 on PyPI
pytestpytest is a testing framework that lets you…
permissive · top 100 on PyPI
scheduleSchedule provides a human-friendly API for…
permissive · top 5,000 on PyPI
temporaProvides utilities, constants, and routines for…
permissive · top 5,000 on PyPI
TGSchedulerTGScheduler is a pure Python task scheduler…
permissive · top 15,000 on PyPI
APSchedulerAPScheduler lets you schedule Python code to…
permissive · top 1,000 on PyPI
rq-schedulerAdds job scheduling capabilities to RQ (Redis…
permissive · top 15,000 on PyPI
timeloopTimeloop runs periodic tasks at fixed intervals…
permissive · top 15,000 on PyPI
Flask-APSchedulerFlask-APScheduler integrates APScheduler with…
permissive · top 15,000 on PyPI
django-apschedulerAdds persistent job scheduling to Django…
permissive · top 15,000 on PyPI
aiojobsaiojobs provides a scheduler for spawning and…
permissive · top 15,000 on PyPI
fsrsImplements the Free Spaced Repetition Scheduler…
permissive · top 15,000 on PyPI