<p align="center">
<a href="https://gitlab.com/DigonIO/scheduler"><img alt="scheduler" src="https://gitlab.com/DigonIO/scheduler/-/raw/master/doc/_assets/logo_name.svg" width="60%"></a>
</p>
<p>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.</p>
[![repository](https://img.shields.io/badge/src-GitLab-orange)](https://gitlab.com/DigonIO/scheduler)
[![mirror](https://img.shields.io/badge/mirror-GitHub-orange)](https://github.com/DigonIO/scheduler)
[![license](https://img.shields.io/badge/license-LGPLv3-orange)](https://gitlab.com/DigonIO/scheduler/-/blob/master/LICENSE)
[![pipeline status](https://gitlab.com/DigonIO/scheduler/badges/master/pipeline.svg)](https://gitlab.com/DigonIO/scheduler/-/pipelines)
[![coverage report](https://gitlab.com/DigonIO/scheduler/badges/master/coverage.svg)](https://gitlab.com/DigonIO/scheduler/-/pipelines)
[![Code style: black](https://gitlab.com/DigonIO/scheduler/-/raw/master/doc/_assets/code_style_black.svg)](https://github.com/psf/black)
[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)
[![pkgversion](https://img.shields.io/pypi/v/scheduler)](https://pypi.org/project/scheduler/)
[![versionsupport](https://img.shields.io/pypi/pyversions/scheduler)](https://pypi.org/project/scheduler/)
[![Downloads Week](https://pepy.tech/badge/scheduler/week)](https://pepy.tech/project/scheduler)
[![Downloads Total](https://pepy.tech/badge/scheduler)](https://pepy.tech/project/scheduler)
[![Documentation](https://img.shields.io/badge/Docs-HostYourDocs-blue)](https://digon.io/hyd/project/scheduler/t/master)
---
If you find the scheduler library beneficial, please consider supporting the project by [starring it on GitHub](https://github.com/DigonIO/scheduler).
[![GitHub Repo stars](https://img.shields.io/github/stars/digonio/scheduler)](https://github.com/DigonIO/scheduler)
## Features
* Easy and user friendly in-process Job scheduling
[(Quick Start)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/quick_start.html)
* Asyncio scheduler [(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/asyncio.html)
* Threading scheduler [(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/threading.html)
* Timezone compatibility [(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/timezones.html)
* Passing of parameters
[(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/parameters.html)
* Job prioritization
* Default linear prioritization
[(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/job_prioritization.html)
* User definable prioritization functions
[(Guide)](https://digon.io/hyd/project/scheduler/t/master/pages/guides/custom_prioritization.html)
* Job tagging
[(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/tags.html)
* Job batching
[(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/job_batching.html)
* Job metadata
[(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/metrics.html)
* Lightweight
* High test coverage
* [Online documentation](https://digon.io/hyd/project/scheduler/t/master/readme.html)
## Installation
### pip
`scheduler` can be installed directly from the PyPI repositories with:
```bash
pip install scheduler
```
Alternatively install `scheduler` from the `git`
[repository](https://gitlab.com/DigonIO/scheduler) with:
```bash
git clone https://gitlab.com/DigonIO/scheduler.git
cd scheduler
pip install .
```
### Arch Linux
The `PKGBUILD` file can be utilized from the
[Arch Build System](https://wiki.archlinux.org/title/Arch_Build_System).
Download the `PKGBUILD` file and from within the containing folder run
```console
makepkg -i
```
## Example: *How to schedule Jobs*
The following example shows how the `Scheduler` is instantiated and how basic `Job`s are created.
For advanced scheduling examples please visit the online
[documentation](https://digon.io/hyd/project/scheduler/t/master/examples.html).
[//]: # (This example is not directly included in the testing environment. Make sure to also update the corresponding test in tests/test_readme.py when updating the following example.)
```py
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:
```py
print(schedule)
```
```text
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 `Job`s periodically can be achieved with a simple loop:
```py
import time
while True:
schedule.exec_jobs()
time.sleep(1)
```
## Documentation
View the API documentation [online](https://digon.io/hyd/project/scheduler/t/master/readme.html).
## Sponsor
<br>
<div align="center">
<a href="https://digon.io">
<img alt="Digon.IO GmbH - Fine-Tuned AI services for developers" src="https://digon.io/static/modules/img/digon_name_right_grey.svg" width="35%">
</a>
</div>
<br>
<div align="center">
At Digon.IO, we provide your developer team with our knowledge and experience in the field of Large Language Models (LLMs).
We specialize in consulting, data engineering, and data science to fine-tune AI services for seamless integration into your projects.
</div>
## License
This free and open source software (FOSS) is published under the [LGPLv3 license](https://www.gnu.org/licenses/lgpl-3.0.en.html).
Raw data
{
"_id": null,
"home_page": null,
"name": "scheduler",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "\"Fabian A. Preiss\" <fpreiss@digon.io>, \"Jendrik A. Potyka\" <jpotyka@digon.io>",
"keywords": "scheduler, schedule, asyncio, threading, datetime, date, time, timedelta, timezone, timing",
"author": null,
"author_email": "\"Fabian A. Preiss\" <fpreiss@digon.io>, \"Jendrik A. Potyka\" <jpotyka@digon.io>",
"download_url": "https://files.pythonhosted.org/packages/b7/7a/bb1870094994c5a805cd664d28cb20cd0dba47666477132e9cd47c9dc6d4/scheduler-0.8.7.tar.gz",
"platform": null,
"description": "<p align=\"center\">\n <a href=\"https://gitlab.com/DigonIO/scheduler\"><img alt=\"scheduler\" src=\"https://gitlab.com/DigonIO/scheduler/-/raw/master/doc/_assets/logo_name.svg\" width=\"60%\"></a>\n</p>\n<p>A simple in-process python scheduler library with asyncio, threading and timezone support.\nSchedule tasks by their time cycles, fixed times, weekdays, dates, weights, offsets and execution\ncounts and automate Jobs.</p>\n\n[![repository](https://img.shields.io/badge/src-GitLab-orange)](https://gitlab.com/DigonIO/scheduler)\n[![mirror](https://img.shields.io/badge/mirror-GitHub-orange)](https://github.com/DigonIO/scheduler)\n[![license](https://img.shields.io/badge/license-LGPLv3-orange)](https://gitlab.com/DigonIO/scheduler/-/blob/master/LICENSE)\n[![pipeline status](https://gitlab.com/DigonIO/scheduler/badges/master/pipeline.svg)](https://gitlab.com/DigonIO/scheduler/-/pipelines)\n[![coverage report](https://gitlab.com/DigonIO/scheduler/badges/master/coverage.svg)](https://gitlab.com/DigonIO/scheduler/-/pipelines)\n[![Code style: black](https://gitlab.com/DigonIO/scheduler/-/raw/master/doc/_assets/code_style_black.svg)](https://github.com/psf/black)\n[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)\n\n[![pkgversion](https://img.shields.io/pypi/v/scheduler)](https://pypi.org/project/scheduler/)\n[![versionsupport](https://img.shields.io/pypi/pyversions/scheduler)](https://pypi.org/project/scheduler/)\n[![Downloads Week](https://pepy.tech/badge/scheduler/week)](https://pepy.tech/project/scheduler)\n[![Downloads Total](https://pepy.tech/badge/scheduler)](https://pepy.tech/project/scheduler)\n[![Documentation](https://img.shields.io/badge/Docs-HostYourDocs-blue)](https://digon.io/hyd/project/scheduler/t/master)\n\n---\n\nIf you find the scheduler library beneficial, please consider supporting the project by [starring it on GitHub](https://github.com/DigonIO/scheduler).\n\n[![GitHub Repo stars](https://img.shields.io/github/stars/digonio/scheduler)](https://github.com/DigonIO/scheduler)\n\n## Features\n\n* Easy and user friendly in-process Job scheduling\n[(Quick Start)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/quick_start.html)\n* Asyncio scheduler [(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/asyncio.html)\n* Threading scheduler [(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/threading.html)\n* Timezone compatibility [(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/timezones.html)\n* Passing of parameters\n [(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/parameters.html)\n* Job prioritization\n * Default linear prioritization\n [(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/job_prioritization.html)\n * User definable prioritization functions\n [(Guide)](https://digon.io/hyd/project/scheduler/t/master/pages/guides/custom_prioritization.html)\n* Job tagging\n [(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/tags.html)\n* Job batching\n [(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/job_batching.html)\n* Job metadata\n [(Example)](https://digon.io/hyd/project/scheduler/t/master/pages/examples/metrics.html)\n* Lightweight\n* High test coverage\n* [Online documentation](https://digon.io/hyd/project/scheduler/t/master/readme.html)\n\n## Installation\n\n### pip\n\n`scheduler` can be installed directly from the PyPI repositories with:\n\n```bash\npip install scheduler\n```\n\nAlternatively install `scheduler` from the `git`\n[repository](https://gitlab.com/DigonIO/scheduler) with:\n\n```bash\ngit clone https://gitlab.com/DigonIO/scheduler.git\ncd scheduler\npip install .\n```\n\n### Arch Linux\n\nThe `PKGBUILD` file can be utilized from the\n[Arch Build System](https://wiki.archlinux.org/title/Arch_Build_System).\nDownload the `PKGBUILD` file and from within the containing folder run\n\n```console\nmakepkg -i\n```\n\n## Example: *How to schedule Jobs*\n\nThe following example shows how the `Scheduler` is instantiated and how basic `Job`s are created.\nFor advanced scheduling examples please visit the online\n[documentation](https://digon.io/hyd/project/scheduler/t/master/examples.html).\n\n[//]: # (This example is not directly included in the testing environment. Make sure to also update the corresponding test in tests/test_readme.py when updating the following example.)\n\n```py\nimport datetime as dt\n\nfrom scheduler import Scheduler\nfrom scheduler.trigger import Monday, Tuesday\n\ndef foo():\n print(\"foo\")\n\nschedule = Scheduler()\n\nschedule.cyclic(dt.timedelta(minutes=10), foo)\n\nschedule.minutely(dt.time(second=15), foo)\nschedule.hourly(dt.time(minute=30, second=15), foo)\nschedule.daily(dt.time(hour=16, minute=30), foo)\nschedule.weekly(Monday(), foo)\nschedule.weekly(Monday(dt.time(hour=16, minute=30)), foo)\n\nschedule.once(dt.timedelta(minutes=10), foo)\nschedule.once(Tuesday(), foo)\nschedule.once(dt.datetime(year=2022, month=2, day=15, minute=45), foo)\n```\n\nA human readable overview of the scheduled jobs can be created with a simple `print` statement:\n\n```py\nprint(schedule)\n```\n\n```text\nmax_exec=inf, tzinfo=None, priority_function=linear_priority_function, #jobs=9\n\ntype function / alias due at due in attempts weight\n-------- ---------------- ------------------- --------- ------------- ------\nMINUTELY foo() 2021-05-26 03:55:15 0:00:14 0/inf 1\nCYCLIC foo() 2021-05-26 04:05:00 0:09:59 0/inf 1\nONCE foo() 2021-05-26 04:05:00 0:09:59 0/1 1\nHOURLY foo() 2021-05-26 04:30:15 0:35:14 0/inf 1\nDAILY foo() 2021-05-26 16:30:00 12:34:59 0/inf 1\nWEEKLY foo() 2021-05-31 00:00:00 4 days 0/inf 1\nWEEKLY foo() 2021-05-31 16:30:00 5 days 0/inf 1\nONCE foo() 2021-06-01 00:00:00 5 days 0/1 1\nONCE foo() 2022-02-15 00:45:00 264 days 0/1 1\n```\n\nExecuting pending `Job`s periodically can be achieved with a simple loop:\n\n```py\nimport time\n\nwhile True:\n schedule.exec_jobs()\n time.sleep(1)\n```\n\n## Documentation\n\nView the API documentation [online](https://digon.io/hyd/project/scheduler/t/master/readme.html).\n\n## Sponsor\n\n<br>\n<div align=\"center\">\n <a href=\"https://digon.io\">\n <img alt=\"Digon.IO GmbH - Fine-Tuned AI services for developers\" src=\"https://digon.io/static/modules/img/digon_name_right_grey.svg\" width=\"35%\">\n </a>\n</div>\n<br>\n<div align=\"center\">\nAt Digon.IO, we provide your developer team with our knowledge and experience in the field of Large Language Models (LLMs).\n\nWe specialize in consulting, data engineering, and data science to fine-tune AI services for seamless integration into your projects.\n</div>\n\n## License\n\nThis free and open source software (FOSS) is published under the [LGPLv3 license](https://www.gnu.org/licenses/lgpl-3.0.en.html).\n",
"bugtrack_url": null,
"license": "LGPLv3",
"summary": "A simple in-process python scheduler library with asyncio, threading and timezone support.",
"version": "0.8.7",
"project_urls": {
"Bug Tracker": "https://gitlab.com/DigonIO/scheduler/-/issues",
"Changelog": "https://gitlab.com/DigonIO/scheduler/-/blob/master/CHANGELOG.md",
"Documentation": "https://digon.io/hyd/project/scheduler/t/master",
"Repository": "https://gitlab.com/DigonIO/scheduler"
},
"split_keywords": [
"scheduler",
" schedule",
" asyncio",
" threading",
" datetime",
" date",
" time",
" timedelta",
" timezone",
" timing"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "698b1be07b3915a79e1032958c5c89fa9296d9e8e09ba2b9bc40f86262d9ff00",
"md5": "953a146c9cfca9f039d1d8618d49d555",
"sha256": "0917fe659a4e62f3d306af7c36f77c5161ef73a7a645bf231db6bd19722b9a3e"
},
"downloads": -1,
"filename": "scheduler-0.8.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "953a146c9cfca9f039d1d8618d49d555",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 34559,
"upload_time": "2024-06-09T19:31:01",
"upload_time_iso_8601": "2024-06-09T19:31:01.737163Z",
"url": "https://files.pythonhosted.org/packages/69/8b/1be07b3915a79e1032958c5c89fa9296d9e8e09ba2b9bc40f86262d9ff00/scheduler-0.8.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b77abb1870094994c5a805cd664d28cb20cd0dba47666477132e9cd47c9dc6d4",
"md5": "a12fa1bb3ea1f3c5abe49af445ea279c",
"sha256": "ab54d6474649650c5d040b0cc0ae314c636b110fd0dd83254a0481bc93415ee5"
},
"downloads": -1,
"filename": "scheduler-0.8.7.tar.gz",
"has_sig": false,
"md5_digest": "a12fa1bb3ea1f3c5abe49af445ea279c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 32031,
"upload_time": "2024-06-09T19:31:03",
"upload_time_iso_8601": "2024-06-09T19:31:03.305012Z",
"url": "https://files.pythonhosted.org/packages/b7/7a/bb1870094994c5a805cd664d28cb20cd0dba47666477132e9cd47c9dc6d4/scheduler-0.8.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-09 19:31:03",
"github": false,
"gitlab": true,
"bitbucket": false,
"codeberg": false,
"gitlab_user": "DigonIO",
"gitlab_project": "scheduler",
"lcname": "scheduler"
}