Уникальность 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 — это не просто инструмент, а конструктор, который даёт разработчику контроль на любом уровне сложности.