Skip to main content

whenly

PyPI version Python versions License: MIT

Lightweight persistent job scheduler for Python — SQLite-backed, minimal dependencies.

from whenly import Scheduler

s = Scheduler()

@s.every(5, "minutes")
def sync_data():
    ...

@s.cron("0 9 * * MON")
def weekly_report():
    ...

s.start()  # background thread

Features

  • SQLite persistence — jobs survive restarts
  • Cron expressions via croniter
  • Interval scheduling — every N seconds/minutes/hours
  • One-off delayed jobs — run once after a delay
  • Decorator or programmatic API
  • Thread-safe background runner
  • CLI for basic management
  • Zero external dependencies (except croniter for cron support)

Install

pip install whenly

Quick Start

from whenly import Scheduler

s = Scheduler()

# Interval jobs
@s.every(30, "seconds")
def poll_api():
    print("Polling...")

# Cron jobs
@s.cron("0 */2 * * *")
def cleanup():
    print("Running cleanup...")

# One-off delayed job
@s.later(10, "minutes")
def send_notification():
    print("Hello!")

# Or pass a function directly
s.later(30, "seconds", func=poll_api)

# Start the scheduler (non-blocking)
s.start()

# Or run blocking
# s.run()

Programmatic API

s.add(poll_api, every="60s")
s.add(cleanup, cron="0 3 * * *")
s.disable("poll")
s.enable("poll")
s.run_now("poll_api")
print(s.jobs)

CLI

whenly list
whenly run

License

MIT


Part of the thecliffhanger open source suite.

Release files for whenly 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for whenly 0.5.0
File Size Uploaded
whenly-0.5.0.tar.gz 25.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for whenly 0.5.0
File Interpreter ABI Platform
whenly-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 37.1 kB

Release files / whenly-0.5.0.tar.gz

Download URL whenly-0.5.0.tar.gz
Size 25.1 kB
Tags Source
SHA-256 checksum
How to use checksums
bf85edfa3b4c9b8ca5dc4233253a38bb98093c7158ba90d1a3f03cd206b3f93e
BLAKE2b-256 checksum
How to use checksums
bd2a231d1a04fdcc42a3c822d9a8e4654246f2d87deeeedfd0ee6c3347cd325f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.5

Release files / whenly-0.5.0-py3-none-any.whl

Download URL whenly-0.5.0-py3-none-any.whl
Size 12.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
02e12575a682e051e3b3ef01f563cf33316aadbfa42ed52f5b6bac3df90a2bf5
BLAKE2b-256 checksum
How to use checksums
0d6d386aeabd7b84b7af0d664f707288700b32a8a6b8ea41f50bc0dc0b4c0b2f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.5

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page