Skip to main content

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 строкой.

Metadata

Release files for classic-scheduler 1.4.1

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

Source distribution (sdist)

Source distribution for classic-scheduler 1.4.1
File Size Uploaded Provenance
classic_scheduler-1.4.1.tar.gz 10.1 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for classic-scheduler 1.4.1
File Interpreter ABI Platform
classic_scheduler-1.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 18.9 kB

Release files / classic_scheduler-1.4.1.tar.gz

Download URL classic_scheduler-1.4.1.tar.gz
Size 10.1 kB
Tags Source
SHA-256 checksum
How to use checksums
012032ab9e6f1a428aebe8efbe4c8602d359724f8a807ca3d892cf3da69a6c6e
BLAKE2b-256 checksum
How to use checksums
92832993637d7ccb4d9d49038348ab6fa50d2a7598f2591d561571de818977e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2025.

Transparency log

Release files / classic_scheduler-1.4.1-py3-none-any.whl

Download URL classic_scheduler-1.4.1-py3-none-any.whl
Size 8.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ce3b51d36c61e57e7dd0d5c024d804270fd2881edd1ed97353f654d9b6dcf0f7
BLAKE2b-256 checksum
How to use checksums
7f9990722bb927ad7f93f68c3b2e252a81aa8461f92010dc6f727b9e22cc7998
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2025.

Transparency log

Security for classic-scheduler 1.4.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for classic_scheduler-1.4.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2025.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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