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

Уникальность QTasks

QTasks — это не просто альтернатива Celery или RQ, а принципиально иная архитектура, ориентированная на гибкость, скорость и расширяемость. Вот ключевые особенности, которые отличают QTasks от других систем:


🧬 Компонентная архитектура

  • Все элементы (Broker, Worker, Storage, Config, Router и др.) — заменяемы.
  • Компоненты можно полностью переписать под свои нужды без модификации ядра.
  • Расширения и сторонние имплементации легко внедряются через плагины.

🆚 Celery: tightly coupled. QTasks: plug-n-play компоненты.


🔁 Поддержка yield в задачах

  • Позволяет строить потоковые пайплайны.
  • Возможность обрабатывать значения по мере генерации через generate_handler.
  • Результаты аккумулируются автоматически — удобно для стриминга и логирования.

🆚 Большинство фреймворков не поддерживает yield внутри задач.


🧠 Echo и доступ к задаче через self

  • При echo=True задача получает доступ к себе (self) — как объекту AsyncTask или SyncTask.
  • Можно создавать вложенные задачи (self.add_task()), обращаться к логгеру, конфигу и другим частям через self.ctx.

🆚 Обычно задача — это просто функция без доступа к инфраструктуре.


⚙️ Встроенный контекст (ctx) задачи

  • self.ctx предоставляет:

  • UUID задачи

  • логгер
  • доступ к Storage, Broker, Config
  • метод cancel() для завершения задачи с пометкой CANCEL

Это создаёт инфраструктуру, доступную прямо из тела задачи — без глобальных переменных.


🧩 Встроенная система плагинов и стартеров

  • Любой компонент может быть обёрнут или дополнен плагином.
  • Плагины можно загружать через конфигурацию или стартер.
  • Пример: логирование, трассировка, мониторинг — без вмешательства в ядро.

🆚 В Celery такое возможно только через monkeypatch или middleware на уровне брокера.


⏱ Таймеры без внешних библиотек

  • Встроенная система AsyncTimer позволяет запускать задачи по cron/interval логике.
  • Используется apscheduler, но работает в связке с ядром QTasks напрямую.

🆚 Celery требует Celery Beat и отдельный сервис.


🛠 Минимальные зависимости и лёгкий запуск

  • Работает без Redis и брокеров по умолчанию — можно использовать in-memory очередь.
  • Запуск: python main.py или py -m qtasks worker -A app
  • Простота делает QTasks идеальным для микросервисов, скриптов и фрилансеров.

🚀 Высокая производительность

  • 0.6–0.7 секунд на задачу при использовании Redis (в сравнении с Celery: 1–3 сек).
  • Использование asyncio.PriorityQueue, anyio.Semaphore и оптимизированных обработчиков.

🧪 Инфраструктура для тестирования

  • Возможность использовать in-memory компоненты.
  • Тестирование задач без запуска воркера.
  • Поддержка pytest, unittest, кастомного AsyncTestCase.

💡 Адаптивность под уровень разработчика

  • Junior: простота использования и регистрации задач.
  • Middle: плагины, middleware, TaskManager.
  • Senior: замена компонентов, трассировка, работа с памятью.
  • Lead: мониторинг, масштабирование, WebView, управление воркерами.

QTasks — это не просто инструмент, а конструктор, который даёт разработчику контроль на любом уровне сложности.