Skip to main content

EAScheduler

Tests Status Documentation Status PyPI - Python Version

PyPI Downloads

Easy async task scheduling

Easy Async Scheduler (or EAScheduler) is a lightweight asyncio scheduler with a nice and easy to use interface.

The home automation software HABApp make use of EAScheduler.

Documentation

The documentation can be found here

Example

import eascheduler

async def my_coro() -> None:
    print('Hello')

# If you want something easy that you can use out of the box just use the default scheduler
scheduler = eascheduler.get_default_scheduler()

# -------------------------------------------------------------------------------------------------------
# Different job types
# -------------------------------------------------------------------------------------------------------

# Run once in 30s
job_once = scheduler.once(30, my_coro)

# Countdown
countdown = scheduler.countdown(30, my_coro)
countdown.reset()               # make countdown start (again)
countdown.stop()                # stop countdown
countdown.set_countdown(15)     # set different countdown time which will be used for the next reset call

# Trigger job which runs continuously, e.g.

# every day at 8
job_every = scheduler.at(scheduler.triggers.time('08:00:00'), my_coro)
# for the first time in 10 mins, then every hour
job_every = scheduler.at(scheduler.triggers.interval(600, 3600), my_coro)

# -------------------------------------------------------------------------------------------------------
# Restricting the trigger with a filter.
# Only when the filter condition passes the time will be taken as the next time

# every Fr-So at 8
scheduler.at(
    scheduler.triggers.time('08:00:00').only_at(scheduler.filters.weekdays('Fr-So')),
    my_coro
)

# Triggers can be grouped
# Mo-Fr at 7, Sa at 8
scheduler.at(
    scheduler.triggers.group(
        scheduler.triggers.time('07:00:00').only_at(scheduler.filters.weekdays('Mo-Fr')),
        scheduler.triggers.time('08:00:00').only_at(scheduler.filters.weekdays('Fr-So')),
    ),
    my_coro
)

# Filters can be grouped with any or all
# On the first sunday of the month at 8
scheduler.at(
    scheduler.triggers.time('08:00:00').only_at(
        scheduler.filters.all(
            scheduler.filters.days('1-7'),
            scheduler.filters.weekdays('So'),
        ),
    ),
    my_coro
)

# -------------------------------------------------------------------------------------------------------
# The trigger time can also be modified

# On sunrise, but not earlier than 8
scheduler.at(
    scheduler.triggers.sunset().earliest('08:00:00'),
    my_coro
)

# One hour before sunset
scheduler.at(
    scheduler.triggers.sunset().offset(timedelta(hours=-1)),
    my_coro
)

Changelog

0.2.9 (2026-08-10)

  • License Change to EUPL-1.2
  • Migrated to pyproject.toml
  • Fixed a bug with sun azimuth
  • Small code improvements
  • Updated dependencies

0.2.8 (2025-08-19)

  • Updated whenever to 0.9 which introduces breaking changes:
    • Removed SystemDateTime and replaced it with ZonedDateTime
  • Updated dependencies and CI

0.2.7 (2025-08-19)

  • Updated dependencies

0.2.6 (2025-06-12)

  • Small fixes
  • Updated dependencies

0.2.5 (2025-05-06)

  • Updated to whenever 0.8 which introduces breaking changes
  • Updated dependencies

0.2.4 (2025-05-06)

  • Updated to whenever 0.8 which introduces breaking changes
  • Updated dependencies

0.2.3 (2025-03-26)

  • Updated dependencies

0.2.2 (2025-01-07)

  • Ensured that all trigger builders are imputable and can be composed without side effects
  • Updated dependencies

0.2.1 (2024-11-20)

  • Updated dependencies and some type hints

0.2.0 (2024-11-13)

  • Complete rewrite

0.1.11 (2023-09-11)

  • Fixed an issue with a possible infinite loop

0.1.10 (2023-08-24)

  • Added option to add a callback to the job when the execution time changes

0.1.9 (2023-07-19)

  • Fix for days when the sun doesn't rise or set. In that case the next date with a sunrise/sunset will be returned.

0.1.8 (2022-12-14)

  • Fix for OneTimeJob incorrectly showing a remaining time after the execution
  • Dependency update

0.1.7 (2022-07-27)

  • Added py.typed

0.1.6 (2022-07-27)

  • Removed Python 3.7 support
  • Fixed setup issues

0.1.5 (2022-02-14)

  • Jobs have a remaining function
  • CountdownJob has a stop function

0.1.4 (2021-06-01)

  • Added option to pause and resume the scheduler
  • Jobs don't have to be in the future any more
  • Sorted imports with isort

0.1.3 (2021-05-06)

  • Fixed a bug where a negative offset/jitter could result in multiple executions

0.1.2 (2021-05-06)

  • Fixed a bug where .every(None, ...) would result in an error

0.1.1 (2021-05-02)

  • Implemented a much nicer API and fixed some bugs

0.1.0 (2021-04-21)

  • Fixed a race condition
  • Added tests

0.0.9 (2021-04-19)

  • Fixes for wrong timezone
  • Added tests

0.0.8 (2021-04-17)

  • Fixes for SunJob, ReoccurringJob
  • Added tests

0.0.7 (2021-04-15)

  • Fixes for Sunrise/Sunset

Metadata

Release files for EAScheduler 0.2.10

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

Source distribution (sdist)

Source distribution for EAScheduler 0.2.10
File Size Uploaded
eascheduler-0.2.10.tar.gz 34.4 kB Details

Built distribution (wheel)

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

Total release size: 83.1 kB

Release files / eascheduler-0.2.10.tar.gz

Download URL eascheduler-0.2.10.tar.gz
Size 34.4 kB
Tags Source
SHA-256 checksum
How to use checksums
50b85969ab43603f0966a57e17a2be4f6c93c310222e2498faa4ae8b347c4e75
BLAKE2b-256 checksum
How to use checksums
1665425dd47bec84466a6b1cd2f2b0e671b7c69da2e390f084a50a1241f41972
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / eascheduler-0.2.10-py3-none-any.whl

Download URL eascheduler-0.2.10-py3-none-any.whl
Size 48.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f25844bb63052381eb3ccad8730da181be77029d6446ca15ebef33e6fc35b4ee
BLAKE2b-256 checksum
How to use checksums
65c1eca59a21a8812b03871bd04413a1f825e2f9d791d7b0595be79867fe2268
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.2.10 This release

2 release files

0.2.9

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.1

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