# Classic Scheduler
## Планировщик
Данная библиотека является продолжением библиотеки акторов `classic actors`. И, как следствие, она зависит от библиотеки акторов.
Планировщик - это актор, который вызывает функции по расписанию.
Рассмотрим пример использования библиотеки:
```python
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!
# ...
```
## Отмена вызова (удаление задачи)
Если расписание задач планируется динамически менять, например, удалить ранее созданную задачу, то при создании задачи в методах необходимо указать атрибут `task_name`. Пример:
```python
scheduler = Scheduler()
scheduler.by_period(1, func, task_name='periodic task')
```
Тогда в дальнейшем вы можете отменить запланированные запуски задач через:
```python
scheduler.cancel('periodic task')
```
## Параметризация вызываемой функции
Планировщик может запускать и функции с аргументами. Аргументы передаются через атрибуты `args` и `kwargs`. Отдельно заметим, что вызываемые объекты так же могут быть акторами, как в примере ниже:
```python
class SomeActor(Actor):
@Actor.method
def func(self, a, b):
print('a + b =', a + b)
some_actor = SomeActor()
some_actor.run()
scheduler = Scheduler()
scheduler.run()
scheduler.by_period(
2,
some_actor.func,
args=(2, 6),
task_name='some_actor_task',
)
# a + b = 8
# a + b = 8
# a + b = 8
# ...
```
## Типы задач
После создания экземпляра планировщика нужно добавить в него задач. Планирование и выполнение задач начнется только после запуска метода `run()`. Отметим, что добавлять задачи в планировщик можно и после вызова метода `run()`.
Планировщик поддерживает три типы задач:
### Одноразовая отложенная задача
Создается через вызов метода планировщика `with_delay`. Задача будет выполнена ровно один раз. Ее вызов отложен на `delay` указанный либо в секундах в `float` либо в `timedelta`.
### Переодическая задача
Создается через вызов метода планировщика `by_period`. Задача выполнится в первый раз, затем она будет выполняется через период `periodic` заданный либо в секундах в `float` либо в `timedelta`.
### Задача по расписанию
Создается через вызов метода планировщика `by_cron`. Задача вызов который задается в формате `CRON` строкой.
Raw data
{
"_id": null,
"home_page": "https://github.com/variasov/classic-scheduler",
"name": "classic-scheduler",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": null,
"author": "Sergei Variasov, Vasiliy Pichugin",
"author_email": "variasov@gmail.com, pichugin_v_i@mail.ru",
"download_url": "https://files.pythonhosted.org/packages/7e/6d/04fd7748df0c9ff0794fe9e9036dec20545548140c11b0739b8cc3f62474/classic-scheduler-1.1.1.tar.gz",
"platform": null,
"description": "# Classic Scheduler\n\n## \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\n\n\u0414\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0430\u043a\u0442\u043e\u0440\u043e\u0432 `classic actors`. \u0418, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u043e\u043d\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0430\u043a\u0442\u043e\u0440\u043e\u0432.\n\n\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a - \u044d\u0442\u043e \u0430\u043a\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e.\n\n\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:\n\n```python\ndef func():\n print('Hello world!')\n\nscheduler = Scheduler()\nscheduler.with_delay(1, func)\nscheduler.by_period(5, func)\nscheduler.by_cron('* * * * *', func)\nscheduler.run()\n\n# Hello world!\n# Hello world!\n# Hello world!\n# ...\n```\n\n## \u041e\u0442\u043c\u0435\u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 (\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438)\n\n\u0415\u0441\u043b\u0438 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0435\u043d\u044f\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443, \u0442\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 `task_name`. \u041f\u0440\u0438\u043c\u0435\u0440:\n\n```python\nscheduler = Scheduler()\nscheduler.by_period(1, func, task_name='periodic task')\n```\n\n\u0422\u043e\u0433\u0434\u0430 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0438 \u0437\u0430\u0434\u0430\u0447 \u0447\u0435\u0440\u0435\u0437:\n\n```python\nscheduler.cancel('periodic task')\n```\n\n## \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\n\n\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438. \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b `args` \u0438 `kwargs`. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0442\u0430\u043a \u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0430\u043a\u0442\u043e\u0440\u0430\u043c\u0438, \u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435:\n\n```python\nclass SomeActor(Actor):\n\n @Actor.method\n def func(self, a, b):\n print('a + b =', a + b)\n\nsome_actor = SomeActor()\nsome_actor.run()\n\nscheduler = Scheduler()\nscheduler.run()\nscheduler.by_period(\n 2,\n some_actor.func,\n args=(2, 6),\n task_name='some_actor_task',\n)\n# a + b = 8\n# a + b = 8\n# a + b = 8\n# ...\n```\n\n## \u0422\u0438\u043f\u044b \u0437\u0430\u0434\u0430\u0447\n\n\u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447. \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447 \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 `run()`. \u041e\u0442\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043c\u043e\u0436\u043d\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 `run()`.\n\n\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0440\u0438 \u0442\u0438\u043f\u044b \u0437\u0430\u0434\u0430\u0447:\n\n### \u041e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u0430\u044f \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430\n\n\u0421\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 `with_delay`. \u0417\u0430\u0434\u0430\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \u0415\u0435 \u0432\u044b\u0437\u043e\u0432 \u043e\u0442\u043b\u043e\u0436\u0435\u043d \u043d\u0430 `delay` \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043b\u0438\u0431\u043e \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 \u0432 `float` \u043b\u0438\u0431\u043e \u0432 `timedelta`.\n\n### \u041f\u0435\u0440\u0435\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430\n\n\u0421\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 `by_period`. \u0417\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437, \u0437\u0430\u0442\u0435\u043c \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0438\u043e\u0434 `periodic` \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u043b\u0438\u0431\u043e \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 \u0432 `float` \u043b\u0438\u0431\u043e \u0432 `timedelta`.\n\n### \u0417\u0430\u0434\u0430\u0447\u0430 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e\n\n\u0421\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 `by_cron`. \u0417\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u0437\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 `CRON` \u0441\u0442\u0440\u043e\u043a\u043e\u0439.\n",
"bugtrack_url": null,
"license": null,
"summary": "Provides scheduler",
"version": "1.1.1",
"project_urls": {
"Bug Tracker": "https://github.com/variasov/classic-scheduler/issues",
"Homepage": "https://github.com/variasov/classic-scheduler"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "7e6d04fd7748df0c9ff0794fe9e9036dec20545548140c11b0739b8cc3f62474",
"md5": "eb966a659be7cf4be663c993ce4ce923",
"sha256": "85bce18fa8c7e7a05bbeb935e8d07312e2b3382a8fe806ca9663ab9798668dcd"
},
"downloads": -1,
"filename": "classic-scheduler-1.1.1.tar.gz",
"has_sig": false,
"md5_digest": "eb966a659be7cf4be663c993ce4ce923",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 8487,
"upload_time": "2024-08-30T10:31:19",
"upload_time_iso_8601": "2024-08-30T10:31:19.139437Z",
"url": "https://files.pythonhosted.org/packages/7e/6d/04fd7748df0c9ff0794fe9e9036dec20545548140c11b0739b8cc3f62474/classic-scheduler-1.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-08-30 10:31:19",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "variasov",
"github_project": "classic-scheduler",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "classic-scheduler"
}