Simple in-process scheduler
Project description
Classic Scheduler
Предоставляет простой in-process планировщик, способный выполнять задачи по cron-расписанию, периодически и отложенно.
Пример:
from classic.scheduler import Scheduler
def func():
print('Hello world!')
scheduler = Scheduler()
scheduler.with_delay(1, func)
scheduler.by_period(5, func)
scheduler.by_cron('* * * * *', func)
scheduler.run()
# Hello world!
# Hello world!
# Hello world!
# ...
Многопоточность
У Scheduler есть параметр в конструкторе - workers_num, по умолчанию равный 1. Этот параметр задает количество потоков в ThreadPool, используемому под капотом. При значении workers_num = 0 задачи будут выполняться в том же потоке, что и планировщик, последовательно.
Также у планировщика есть 2 способа запуска - методы .run() и .start().
Метод .run() вводит поток в вечный цикл, в котором происходит управление задачами по расписанию.
Метод .start() запускает фоновый поток, в котором выполняется .run(). Также планировщик имеет метод .stop(), используя который можно отправить сообщение об остановке. Также .stop имеет параметры block и timeout, позволяющие остановить текущий поток в ожидании завершения фонового потока, и установить время ожидания остановки.
Метод .join() блокирует текущий поток в ожидании завершения фонового потока
Интеграция с classic-components
Если используется совместно с classic-components, то можно использовать декораторы by_period и by_cron на классах с логикой, чтобы упростить регистрацию задач:
from classic.components import component
from classic.scheduler import Scheduler, by_period, by_cron
@component
def SomeLogic:
@by_period(1)
def need_to_call_periodically(self):
print('Hello')
@by_cron('* * * * *')
def need_to_call_by_schedule(self):
print('Hi')
scheduler = Scheduler()
some_logic = SomeLogic(scheduler=scheduler) # Регистрация произойдет при инстанцировании компонента
scheduler.run()
# Hello
# Hi
Отмена вызова (удаление задачи)
Если расписание задач планируется динамически менять, например, удалить ранее
созданную задачу, то при создании задачи в методах необходимо
указать атрибут task_name. Пример:
from classic.scheduler import Scheduler
scheduler = Scheduler()
scheduler.by_period(1, lambda: print('hello'), task_name='periodic task')
scheduler.cancel('periodic task')
Тогда в дальнейшем вы можете отменить запланированные запуски задач через:
scheduler.cancel('periodic task')
Параметризация вызываемой функции
Планировщик может запускать и функции с аргументами.
Аргументы передаются через атрибуты args и kwargs.
Отдельно заметим, что вызываемые объекты так же могут
быть акторами, как в примере ниже:
from classic.scheduler import Scheduler
def print_sum(a, b):
print(f'a + b = {a+b}')
scheduler = Scheduler()
scheduler.run()
scheduler.by_period(
2,
print_sum,
args=(2, 6),
)
# a + b = 8
# a + b = 8
# a + b = 8
# ...
Типы задач
После создания экземпляра планировщика нужно добавить в него задач.
Планирование и выполнение задач начнется только после запуска метода run().
Отметим, что добавлять задачи в планировщик можно и после вызова метода run().
Планировщик поддерживает три типа задач:
Одноразовая отложенная задача
Создается через вызов метода планировщика with_delay.
Задача будет выполнена ровно один раз. Ее вызов отложен на delay указанный
либо в секундах в float либо в timedelta.
Переодическая задача
Создается через вызов метода планировщика by_period. Задача выполнится
в первый раз, затем она будет выполнятmся через период periodic,
заданный либо в секундах в float либо в timedelta.
Задача по расписанию
Создается через вызов метода планировщика by_cron.
Задача вызов который задается в формате CRON строкой.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file classic_scheduler-1.4.0.tar.gz.
File metadata
- Download URL: classic_scheduler-1.4.0.tar.gz
- Upload date:
- Size: 10.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6546de9c379ac0f92da838e6873bf773b5932eb04db7cfb326fe95f7072f0fc8
|
|
| MD5 |
31849ba27cfd4406c6eb8a03ed42f5d0
|
|
| BLAKE2b-256 |
2f9b3632f72d05d73502e50cba632050fc7b447c3e4d1d43b0db4461b1fbf10c
|
Provenance
The following attestation bundles were made for classic_scheduler-1.4.0.tar.gz:
Publisher:
publish.yml on variasov/classic-scheduler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
classic_scheduler-1.4.0.tar.gz -
Subject digest:
6546de9c379ac0f92da838e6873bf773b5932eb04db7cfb326fe95f7072f0fc8 - Sigstore transparency entry: 622803833
- Sigstore integration time:
-
Permalink:
variasov/classic-scheduler@e65cfd71415ba2a42010e6dba4bd7cb2ebd62b3d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/variasov
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e65cfd71415ba2a42010e6dba4bd7cb2ebd62b3d -
Trigger Event:
push
-
Statement type:
File details
Details for the file classic_scheduler-1.4.0-py3-none-any.whl.
File metadata
- Download URL: classic_scheduler-1.4.0-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
628fb28013f49a51ed6d330c9fa128fd6c0e18f2c606d18d0aa5b88303e1eaae
|
|
| MD5 |
8a4ae596dc58a83d6fc734e794d2fc86
|
|
| BLAKE2b-256 |
ad64f4bfec6d6ff7a9a712b1eb0b5c7b46c39591a70e5425bb7c0ff30a6c7448
|
Provenance
The following attestation bundles were made for classic_scheduler-1.4.0-py3-none-any.whl:
Publisher:
publish.yml on variasov/classic-scheduler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
classic_scheduler-1.4.0-py3-none-any.whl -
Subject digest:
628fb28013f49a51ed6d330c9fa128fd6c0e18f2c606d18d0aa5b88303e1eaae - Sigstore transparency entry: 622803836
- Sigstore integration time:
-
Permalink:
variasov/classic-scheduler@e65cfd71415ba2a42010e6dba4bd7cb2ebd62b3d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/variasov
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e65cfd71415ba2a42010e6dba4bd7cb2ebd62b3d -
Trigger Event:
push
-
Statement type: