Пример переменных в функциях задач¶
QTasks поддерживает два встроенных механизма управления логикой задач:
- Depends — вызов внешних функций, генераторов или контекстных менеджеров при выполнении задачи.
- State — хранение и обмен состоянием между задачами.
🔧 Пример 1: Depends (зависимости)¶
Depends позволяет подключать ресурсы, которые нужно инициализировать и закрыть
по завершении.
Функция может быть простой, генераторной или асинхронным контекстным менеджером.
from qtasks.plugins import Depends
from contextlib import asynccontextmanager
@asynccontextmanager
async def get_db():
db = await connect_to_db()
yield db
print("close...")
await db.disconnect()
@app.task
async def test_depends(depends: Depends(get_db)):
depends.execute(...)
print("Вызов выполнен")
return
Вывод в консоль:
<Сервер запускает задачу>
Вызов выполнен
<Сервер завершает задачу>
close...
Итог: задача использует подключение к БД, которое автоматически закрывается.
🔧 Пример 2: State (состояние между задачами)¶
State — это хранилище данных, доступное для последовательных шагов одной логики.
from qtasks.plugins import AsyncState
class MyState(AsyncState):
pass
@app.task
async def step1(state: MyState):
await state.set("state", "await_phone")
await state.update(step=1, prompt="Введите телефон")
return "ok"
@app.task
async def step2(state: MyState):
print(await state.get_all())
cur = await state.get("state")
if cur != "await_phone":
return "error"
await state.update(step=2)
await state.delete("state")
await state.clear()
return "ok"
Вывод в консоль:
{"state": "await_phone", "step": 1, "prompt": "Введите телефон"}
Итог: первый шаг записал данные в состояние, второй шаг их прочитал, проверил и очистил.
⚙️ Как это работает внутри QTasks?¶
- Depends регистрируется при вызове задачи и функция внутри запускается при выполнении TaskExecutor. Это удобно для подключения к БД, API или внешним сервисам.
- State реализован как асинхронное key-value хранилище. Оно поддерживает
set,update,get,delete,clear, а также чтение всех данных разом (get_all).
🏢 Пример использования в компании¶
Допустим, реализуется пошаговая форма регистрации:
step1показывает пользователю запрос на ввод телефона.step2проверяет, что введён телефон, и двигает процесс дальше.
При этом Depends может использоваться для работы с подключением к базе, а State
— для хранения промежуточных данных пользователя.
✅ Итоги¶
- Depends — для подключения зависимостей (ресурсы, контексты, сервисы).
- State — для пошагового хранения данных между задачами.
Вместе они позволяют строить гибкие пайплайны: от интеграций с БД до чат-ботов и сложных бизнес-процессов.