Awesome FastAPI后台任务:FastAPI与Celery定时任务

Awesome FastAPI后台任务:FastAPI与Celery定时任务

【免费下载链接】awesome-fastapi A curated list of awesome things related to FastAPI 【免费下载链接】awesome-fastapi 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-fastapi

你是否还在为FastAPI应用中的耗时操作导致接口响应缓慢而烦恼?是否需要实现定时发送邮件、数据备份等周期性任务?本文将带你一文掌握FastAPI与Celery结合实现后台任务和定时任务的完整方案,读完你将能够:使用Celery处理异步任务、配置定时任务调度、实现任务状态监控,并了解生产环境部署最佳实践。

FastAPI与Celery架构概述

FastAPI作为现代高性能Python Web框架,非常适合构建API服务,但对于耗时操作(如文件处理、邮件发送)直接在请求周期内处理会导致响应延迟。Celery是一个强大的分布式任务队列,能够将这些耗时任务异步化处理,两者结合可实现高效的后台任务处理架构。

核心组件

  • FastAPI应用:接收HTTP请求,触发异步任务
  • Celery Worker:处理任务的工作节点
  • 消息代理(Broker):如RabbitMQ或Redis,用于任务队列存储
  • 结果后端(Backend):存储任务执行结果

工作流程

mermaid

环境搭建与基础配置

安装依赖

pip install fastapi uvicorn celery redis

项目结构

典型的FastAPI+Celery项目结构如下:

awesome-fastapi/
├── main.py          # FastAPI应用
├── celery_app.py    # Celery配置
├── tasks.py         # 任务定义
└── requirements.txt # 依赖列表

Celery配置

创建celery_app.py配置文件:

from celery import Celery

app = Celery(
    'tasks',
    broker='redis://localhost:6379/0',
    backend='redis://localhost:6379/0',
    include=['tasks']
)

# 定时任务配置
app.conf.beat_schedule = {
    'daily-backup': {
        'task': 'tasks.backup_database',
        'schedule': 86400.0,  # 24小时
        'args': ('backup_',),
    },
}

任务定义与调用

创建任务

tasks.py中定义任务:

from celery_app import app
import time

@app.task
def process_data(data: str) -> str:
    """处理数据的异步任务"""
    time.sleep(10)  # 模拟耗时操作
    return f"Processed: {data}"

@app.task
def backup_database(prefix: str) -> str:
    """数据库备份定时任务"""
    filename = f"{prefix}{time.strftime('%Y%m%d')}.sql"
    # 备份逻辑实现
    return f"Backup created: {filename}"

FastAPI集成

main.py中创建FastAPI应用并调用任务:

from fastapi import FastAPI
from tasks import process_data
from celery.result import AsyncResult

app = FastAPI()

@app.post("/process")
async def trigger_task(data: str):
    task = process_data.delay(data)
    return {"task_id": task.id}

@app.get("/result/{task_id}")
async def get_result(task_id: str):
    result = AsyncResult(task_id)
    return {
        "status": result.status,
        "result": result.result if result.ready() else None
    }

运行与监控

启动组件

  1. 启动Redis(作为Broker和Backend):
redis-server
  1. 启动Celery Worker
celery -A celery_app worker --loglevel=info
  1. 启动Celery Beat(处理定时任务):
celery -A celery_app beat --loglevel=info
  1. 启动FastAPI应用
uvicorn main:app --reload

任务监控

使用Flower监控Celery任务:

celery -A celery_app flower

访问http://localhost:5555即可查看任务执行状态和历史记录。

生产环境部署

Docker化部署

项目中提供了多个Docker相关资源,可参考:

典型的docker-compose.yml配置:

version: '3'

services:
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
  
  celery_worker:
    build: .
    command: celery -A celery_app worker --loglevel=info
    depends_on:
      - redis
  
  celery_beat:
    build: .
    command: celery -A celery_app beat --loglevel=info
    depends_on:
      - redis
  
  fastapi:
    build: .
    command: uvicorn main:app --host 0.0.0.0 --port 8000
    ports:
      - "8000:8000"
    depends_on:
      - redis

最佳实践

  • 使用环境变量配置敏感信息
  • 实现任务重试机制处理临时故障
  • 合理设置任务超时时间
  • 定期清理任务结果数据
  • 监控系统资源使用情况

扩展学习资源

通过FastAPI与Celery的结合,你可以轻松实现高性能的异步任务处理和定时任务调度,为应用添加强大的后台处理能力。无论是邮件发送、数据处理还是定时备份,这种架构都能确保你的API保持快速响应,同时可靠地处理各种后台任务。

【免费下载链接】awesome-fastapi A curated list of awesome things related to FastAPI 【免费下载链接】awesome-fastapi 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-fastapi

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值