newlib
Крошечный планировщик с cron-выражениями и разбросом.
newlib заменяет системный crontab для работы, которая принадлежит вашему приложению. Он учитывает часовые пояса, добавляет разброс, чтобы сотня серверов не просыпалась одновременно, и аккуратно останавливается.
uv add newlib
Пример
from datetime import timedelta
from newlib import Scheduler
scheduler = Scheduler(
timezone="Europe/Moscow",
jitter=timedelta(seconds=30),
)
ok = scheduler.add("cleanup", "0 3 * * *")
print(ok)
scheduler.start()
Возможности
- Часовые пояса. У каждой задачи может быть свой часовой пояс, переходы на летнее время обрабатываются корректно.
- Без наложений. Если задача ещё выполняется, когда наступил следующий запуск, он пропускается, а не стартует второй раз.
- Тестируемость. Подставьте фальшивые часы и сдвигайте их, чтобы запускать задачи в тестах.
- Разброс. Запуски размазываются по окну, чтобы сотня экземпляров не била в базу в одну секунду.
- Мягкая остановка. Остановка планировщика ждёт выполняющиеся задачи до таймаута.
Документация
УстановкаТребования, установка и сборка из исходников.
РуководствоПервая программа и основные понятия.
ПримерыЗаконченные программы для типичных задач.
НастройкиВсе параметры, их типы и значения по умолчанию.
СправочникСигнатуры и поведение публичного API.
ТестированиеКак тестировать код, использующий библиотеку.
Решение проблемЧастые проблемы и их решения.
Частые вопросыКороткие ответы на частые вопросы.
Обновление версийКак переходить между мажорными версиями.
Список измененийИстория релизов.
БезопасностьПоддерживаемые версии и сообщения об уязвимостях.
Как помочь проектуКак собрать проект и отправить изменения.
ПоддержкаГде задать вопрос и как связаться с авторами.