Фоновые задачи и очереди заданий
Научитесь выносить медленные операции из обработчиков запросов с помощью фоновых задач FastAPI и распределённых очередей заданий, таких как Celery.
«Фоновые задачи и очереди заданий» — бесплатный урок FastAPI Backend Development Bootcamp на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения FastAPI Backend Development Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс FastAPI Backend Development Bootcamp содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Why Offload Work?
Some work, like sending email, generating reports, or processing images, is too slow to do inside a request.
Making the user wait hurts latency. Instead, respond fast and do the heavy work in the background.
FastAPI BackgroundTasks
FastAPI ships a lightweight BackgroundTasks tool for work that should run after the response is sent.
from fastapi import BackgroundTasks
def write_log(msg: str):
with open("log.txt", "a") as f:
f.write(msg)
@app.post("/signup")
def signup(bg: BackgroundTasks):
bg.add_task(write_log, "new user")
return {"ok": True}Limits of BackgroundTasks
BackgroundTasks runs in the same process. If the server restarts, the work is lost, and it cannot scale across machines.
For durable, distributed work you need a real job queue.
What is a Job Queue?
A job queue stores tasks in a broker such as Redis or RabbitMQ. Separate worker processes pull tasks and execute them, independent of the web server.
Defining a Celery Task
Celery is the most common Python job queue. You decorate a function as a task.
from celery import Celery
celery_app = Celery("tasks", broker="redis://localhost:6379/0")
@celery_app.task
def send_email(to: str):
# slow work here
return "sent to " + toEnqueuing from FastAPI
Trigger the task with .delay(); it returns immediately while a worker runs it later.
@app.post("/notify")
def notify(email: str):
send_email.delay(email)
return {"queued": True}Running Workers
Workers are separate processes you scale independently of the web tier.
celery -A tasks worker --loglevel=info --concurrency=4Tracking Task Results
With a result backend, you can store and query task status and outcomes.
result = send_email.delay("a@b.com")
print(result.id, result.status)Retries and Reliability
Job queues can automatically retry failed tasks with backoff, something in-process tasks cannot do.
@celery_app.task(bind=True, max_retries=3)
def process(self, item):
try:
do_work(item)
except Exception as exc:
raise self.retry(exc=exc, countdown=10)Scheduling Periodic Jobs
Celery Beat runs tasks on a schedule, like nightly cleanups or hourly syncs.
celery_app.conf.beat_schedule = {
"cleanup": {"task": "tasks.cleanup", "schedule": 3600.0}
}Idempotent Tasks
Because a queued task may be retried, design tasks to be idempotent so running them twice causes no harm, for example by checking if the email was already sent.
Quick Check
Test your background work knowledge.
Recap
You learned to keep request handlers fast:
- BackgroundTasks handles simple in-process after-response work
- Job queues like Celery give durable, distributed, retryable tasks
- Scale workers independently and schedule periodic jobs
Offloading slow work keeps your API responsive under load.
Часто задаваемые вопросы
Урок «Фоновые задачи и очереди заданий» бесплатный?
Да — полный текст урока «Фоновые задачи и очереди заданий» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс FastAPI Backend Development Bootcamp, подпишись на CoddyKit PRO. Курс FastAPI Backend Development Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Фоновые задачи и очереди заданий»?
Научитесь выносить медленные операции из обработчиков запросов с помощью фоновых задач FastAPI и распределённых очередей заданий, таких как Celery. Ты практикуешь FastAPI Backend Development Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать FastAPI Backend Development Bootcamp?
Предыдущий опыт не требуется. FastAPI Backend Development Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Фоновые задачи и очереди заданий»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке FastAPI Backend Development Bootcamp?
Да. Каждый урок FastAPI Backend Development Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Стратегии кэширования с Redis
- Асинхронный доступ к базе данных
- Балансировка нагрузки и мониторинг
- Фоновые задачи и очереди заданий