skillfed

scheduler

A simple in-process python scheduler library with asyncio, threading and timezone support.

scheduler v0.8.11 104.1K downloads/30d#12,769 on PyPI
Copyleft license LGPL-3.0-only Active released

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 scheduler

uv

uv add scheduler

poetry

poetry add scheduler

Installing 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

Development Status :: 4 - BetaIntended Audience :: DevelopersOperating System :: OS IndependentProgramming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Programming Language :: Python :: 3.14Programming Language :: Python :: Implementation :: CPythonTopic :: Scientific/EngineeringTopic :: Software Development :: LibrariesTyping :: Typed

Tags

in-process job schedulerasyncio schedulertask scheduling libraryrecurring job schedulingtimezone-aware scheduling
task-schedulingasyncio-compatibletimezone-aware

More Libraries packages