A simple in-process python scheduler library with asyncio, threading and timezone support. Schedule tasks by their time cycles, fixed times, weekdays, dates, weights, offsets and execution counts and automate Jobs.
If you find the scheduler library beneficial, please consider supporting the project by starring it on GitHub.
- Easy and user friendly in-process Job scheduling (Quick Start)
- Asyncio scheduler (Example)
- Threading scheduler (Example)
- Timezone compatibility (Example)
- Passing of parameters (Example)
- Job prioritization
- Job tagging (Example)
- Job batching (Example)
- Job metadata (Example)
- Lightweight
- High test coverage
- Online documentation
scheduler can be installed directly from the PyPI repositories with:
pip install schedulerAlternatively install scheduler from the git
repository with:
git clone https://gitlab.com/DigonIO/scheduler.git
cd scheduler
pip install .The PKGBUILD file can be utilized from the
Arch Build System.
Download the PKGBUILD file and from within the containing folder run
makepkg -iThe following example shows how the Scheduler is instantiated and how basic Jobs are created.
For advanced scheduling examples please visit the online
documentation.
import datetime as dt
from scheduler import Scheduler
from scheduler.trigger import Monday, Tuesday
def foo():
print("foo")
schedule = Scheduler()
schedule.cyclic(dt.timedelta(minutes=10), foo)
schedule.minutely(dt.time(second=15), foo)
schedule.hourly(dt.time(minute=30, second=15), foo)
schedule.daily(dt.time(hour=16, minute=30), foo)
schedule.weekly(Monday(), foo)
schedule.weekly(Monday(dt.time(hour=16, minute=30)), foo)
schedule.once(dt.timedelta(minutes=10), foo)
schedule.once(Tuesday(), foo)
schedule.once(dt.datetime(year=2022, month=2, day=15, minute=45), foo)A human readable overview of the scheduled jobs can be created with a simple print statement:
print(schedule)max_exec=inf, tzinfo=None, priority_function=linear_priority_function, #jobs=9
type function / alias due at due in attempts weight
-------- ---------------- ------------------- --------- ------------- ------
MINUTELY foo() 2021-05-26 03:55:15 0:00:14 0/inf 1
CYCLIC foo() 2021-05-26 04:05:00 0:09:59 0/inf 1
ONCE foo() 2021-05-26 04:05:00 0:09:59 0/1 1
HOURLY foo() 2021-05-26 04:30:15 0:35:14 0/inf 1
DAILY foo() 2021-05-26 16:30:00 12:34:59 0/inf 1
WEEKLY foo() 2021-05-31 00:00:00 4 days 0/inf 1
WEEKLY foo() 2021-05-31 16:30:00 5 days 0/inf 1
ONCE foo() 2021-06-01 00:00:00 5 days 0/1 1
ONCE foo() 2022-02-15 00:45:00 264 days 0/1 1
Executing pending Jobs periodically can be achieved with a simple loop:
import time
while True:
schedule.exec_jobs()
time.sleep(1)View the API documentation online.
We specialize in consulting, data engineering, and data science to fine-tune AI services for seamless integration into your projects.
This free and open source software (FOSS) is published under the LGPLv3 license.