schedule
Job scheduling for humans.
What it is and what it does
Schedule is a lightweight, in-process job scheduler that lets you define periodic tasks using a natural, chainable API. Instead of writing cron expressions or managing separate daemon processes, you call methods like `schedule.every(10).seconds.do(job)` or `schedule.every().monday.do(job)` to register functions, then repeatedly call `schedule.run_pending()` in your main loop to execute them on time. It has no external dependencies and works entirely within your Python process.
The package is designed for simple, synchronous periodic tasks—background jobs, polling, cleanup routines, or monitoring checks that fit naturally into an existing application. It is not a distributed task queue or a replacement for systems like Celery; it is meant for tasks you want to run locally and repeatedly on a predictable schedule. With no active development since mid-2024 but stable production status and broad Python version support (3.7–3.12), it remains a reliable choice for straightforward scheduling needs.
Use it for:
- Run database cleanup or maintenance tasks at fixed intervals within a long-running application.
- Poll an external API or service periodically and process the results.
- Send periodic status reports, notifications, or reminders at specific times of day.
- Execute background health checks or monitoring tasks on a recurring schedule.
- Trigger data synchronization or cache refresh jobs at regular intervals.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Schedule provides a human-friendly API for running Python functions periodically at specified intervals or times without requiring external processes or dependencies.
Yes. Schedule is a mature, zero-dependency library with proven stability (12258 stars, Production/Stable status) and broad Python version support. Install friction is minimal and there are no known security vulnerabilities. The dormant maintenance status is not a concern given the package's simplicity and stability. It is the right choice if you need lightweight in-process job scheduling; avoid it only if you need distributed task execution, complex retry logic, or integration with external job queues.
Install
schedule on PyPI
pip
pip install scheduleuv
uv add schedulepoetry
poetry add scheduleInstalling schedule
Before you install
Installation is straightforward with no external dependencies. The package is dormant (last release 2024-05-25, 811 days ago) but marked Production/Stable and carries 12258 repository stars, suggesting it is mature and widely used rather than actively developed.
License in practice
MIT License (permissive) places no restrictions on use, modification, or distribution in commercial or private projects.
Quickstart
pip install schedule
import schedule
import time
def job():
print("Working...")
schedule.every(10).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
Requires Python 3.7 or later. The scheduler runs in the main thread and blocks on the while loop; integration with async frameworks or other event loops requires additional coordination.
Verify before relying
- Whether the package handles daylight saving time transitions correctly across timezones.
- Performance characteristics when managing hundreds or thousands of scheduled jobs simultaneously.
- How the scheduler behaves if system time is adjusted backward or forward.
Package facts
| License | MIT License (permissive) |
| Python support | supports the current Python release (>=3.7) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | none |
| Maintenance | dormant — 811 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 9,614,282/month — #1,517 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: schedule-1.2.2-py3-none-any.whl
Keywords: schedule, periodic, jobs, scheduling, clockwork, cron, scheduler, job scheduling
Tags
More Software Development packages
Provides backported and experimental type hints…
permissive · top 100 on PyPI
numpyNumPy provides an N-dimensional array object…
permissive · top 100 on PyPI
fastapiFastAPI is a Python web framework for building…
permissive · top 100 on PyPI
annotated-docProvides a way to document function parameters,…
permissive · top 100 on PyPI
typerTyper builds command-line applications from…
permissive · top 1,000 on PyPI
distlibDistlib provides low-level packaging utilities…
permissive · top 1,000 on PyPI
schedulerAn in-process job scheduler for Python that…
copyleft · top 15,000 on PyPI
timeloopTimeloop runs periodic tasks at fixed intervals…
permissive · top 15,000 on PyPI
aiocronSchedules async functions to run on cron…
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
TGSchedulerTGScheduler is a pure Python task scheduler…
permissive · top 15,000 on PyPI
django-crontabIntegrates system crontab scheduling into…
permissive · top 15,000 on PyPI
Flask-APSchedulerFlask-APScheduler integrates APScheduler with…
permissive · top 15,000 on PyPI
cronitorA Python client library for Cronitor that…
permissive · top 15,000 on PyPI
python-crontabReads, writes, and manipulates system crontab…
copyleft · top 5,000 on PyPI