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 и веб-интерфейса.
Куда дальше¶
- Впервые здесь: Первая задача, затем запускаемый пример с FastAPI.
- Переезжаете с Celery: Переезд с Celery.
- Как она выглядит по скорости рядом с другими: Бенчмарк.
- Запускаете в проде: Деплой и эксплуатация и Доставка и воркер.
- Заметки о дизайне и решения — в akadze-harness.