Перейти к содержанию

akadze

Очередь задач для Python. Брокер — та же база PostgreSQL, что уже есть у вашего приложения. Задание ставится в очередь в той же транзакции, что и ваши записи, а воркер забирает его через FOR UPDATE SKIP LOCKED под арендой с heartbeat. Периодические задачи выполняются в том же воркере, отдельного процесса beat нет.

pip install akadze

Статус: alpha (0.x)

До 1.0 публичный API может меняться между минорными версиями. Об ошибках — в Issues.

Документация соответствует ветке main, которая может опережать последний релиз на PyPI. Поведение, изменившееся в 0.6.0, помечено «с 0.6.0»; что учесть при обновлении — в release notes.

Термины

Задача (task) — зарегистрированная функция. Задание (job) — строка в akadze.jobs: один вызов задачи с аргументами. Claim — выборка заданий воркером.

Почему Postgres в роли брокера

  • Постановка в очередь транзакционна. enqueue выполняется на вашем соединении. Откатилась транзакция — пропало и задание. Не нужны ни on_commit, ни outbox-таблица.
  • Одна система в эксплуатации. Не нужно разворачивать, бэкапить и мониторить Redis или RabbitMQ рядом с базой, которую вы и так обслуживаете.
  • Состояние можно запросить. Задания — строки в akadze.jobs. CLI, list_jobs и метрики Prometheus читают одни и те же строки.

Что есть

Задачи async def или синхронные функции, аргументы проверяются по сигнатуре
Ретраи экспоненциальный backoff с джиттером, своя кривая на задачу, Retry / Snooze / Fail / Cancel
Доставка at least once, аренда с heartbeat, задания потерянного воркера подбирают другие
Расписания cron (с часовыми поясами IANA) и интервалы внутри воркера, один запуск на слот по всему кластеру
Лимиты max_running и max_starts за окно по limit_key, на весь кластер
Справедливость опциональный fair claim между арендаторами внутри приоритета
Эксплуатация CLI для заданий, очередей, лимитов и воркеров; пауза и возобновление; метрики Prometheus
Тестирование akadze.testing.drain выполняет готовые задания в процессе теста

Чего нет

  • Брокеров, кроме Postgres.
  • Canvas (chain, group, chord) и result backend. Шаги связываются через complete_tx.
  • HTTP API и веб-интерфейса.

Куда дальше