В чем разница между Dramatiq и Celery?
Что проверяют
Работали ли вы с фоновыми задачами руками и понимаете ли, чем библиотеки отличаются по поведению, а не по количеству звёзд на GitHub. Следом обычно спрашивают, что будет с задачей, если воркер упадёт посреди выполнения, и какую библиотеку вы взяли бы в новый проект.
Как отвечать
Сравнивайте по поведению по умолчанию, главная разница именно в нём:
- подтверждение: Celery по умолчанию подтверждает сообщение до выполнения задачи, и при падении воркера задача теряется, пока вы не включите
acks_late. Dramatiq подтверждает после выполнения. Идемпотентность задач нужна в обоих случаях; - повторы: в Dramatiq повторы с экспоненциальной задержкой включены из коробки (до 20 попыток), в Celery их надо описать через
autoretry_forилиself.retry(); - брокеры: Celery через Kombu работает с RabbitMQ, Redis и Amazon SQS, у Dramatiq только RabbitMQ и Redis плюс
StubBrokerдля тестов; - возможности: у Celery есть Canvas (
chain,group,chord), периодические задачи через Celery Beat и много бэкендов результатов. Dramatiq скромнее:pipeline,group, результаты через отдельный middleware, а для расписания нужен сторонний планировщик вроде APScheduler; - архитектура: Dramatiq собран из middleware (повторы, лимит времени, метрики Prometheus), которые легко заменить или дописать. Celery монолитнее и настраивается десятками параметров.
Вывод формулируйте через условие. Celery оправдан, когда нужны сложные цепочки, расписание и экосистема: Flower, готовая интеграция с Django. Dramatiq хорош, когда задачи простые, их много и хочется надёжного поведения без долгой настройки.
Где спотыкаются
Говорят «Dramatiq быстрее» без замеров. Скорость упирается в брокер, сериализацию и саму задачу, а не в библиотеку.
Считают Flower встроенной частью Celery. Это отдельный пакет, а у Dramatiq мониторинг тоже есть: метрики через Prometheus middleware и сторонние дашборды.
Не знают про раннее подтверждение в Celery и потом удивляются, что задачи пропадают при деплое или при падении воркера по памяти.