fastapi celery flower rabbitmq redis 可运行demo

资料

1.FastAPi Celery RabbitMQ 与 Redis 的使用,并使用 Flower 监控 Celery 状态 - 星尘的博客 - 博客园

2.Celery + Flower + FastAPI + RabbitMQ ,Python实现异步消息队列和监控_fastapi rabbitmq-CSDN博客

3.FastAPI如何集成celery实现定时任务和异步任务并且使用docker-compose部署 - JentZhang - 博客园

4.window下celery正常启动后能收到任务但不执行任务的解决办法 - 乔小生1221 - 博客园

5.Celery周期任务正常启动后能收到任务,但不执行任务的解决办法_celery任务不执行-CSDN博客

6.FastAPI项目中用Celery和RabbitMQ处理耗时任务,提升服务器响应速度-原创手记-慕课网

7.开发环境下,如何通过一个命令让 fastapi 和 celery 一起工作-腾讯云开发者社区-腾讯云

8.构建高性能异步任务引擎:FastAPI + Celery + Redis_celery fastapi-CSDN博客

9.【问题记录】获取celery任务状态报错 - AttributeError: 'DisabledBackend' object has no attribute '_get_task_meta_for-CSDN博客

10.Celery产生随机队列问题_celery traceback-CSDN博客

过程

开发环境

windows, 已经安装好的 rabbitmq

目录结构

/project_root

├── /app

│ ├── init.py

│ ├── main.py

│ ├── tasks.py

│ ├── celery_config.py

│ └── worker.py

├── /logs(非必须)

├── /venv(非必须)

├── requirements.txt(非必须)

└── README.md(非必须)

依赖的三方库

复制代码
amqp==5.3.1
annotated-types==0.7.0
anyio==4.8.0
billiard==4.2.1
celery==5.4.0
click==8.1.8
click-didyoumean==0.3.1
click-plugins==1.1.1
click-repl==0.3.0
colorama==0.4.6
dnspython==2.7.0
eventlet==0.39.1
fastapi==0.115.11
flower==2.0.1
greenlet==3.1.1
h11==0.14.0
humanize==4.12.1
idna==3.10
kombu==5.4.2
pip==25.0.1
prometheus_client==0.21.1
prompt_toolkit==3.0.50
pydantic==2.10.6
pydantic_core==2.27.2
python-dateutil==2.9.0.post0
pytz==2025.1
six==1.17.0
sniffio==1.3.1
starlette==0.46.1
tornado==6.4.2
typing_extensions==4.12.2
tzdata==2025.1
uvicorn==0.34.0
vine==5.1.0
wcwidth==0.2.13

文件内容

celery_config.py

python 复制代码
from celery import Celery

# 使用RabbitMQ作为消息中间件
celery_app = Celery('tasks', broker="amqp://《username》:《password》@《hostname》:《port》//")

# 配置Celery
celery_app.conf.update(
    imports=["app.tasks"],
    result_backend='rpc://',  # 使用RPC作为结果后端
    task_serializer='json',   # 任务数据使用json格式
)

main.py

python 复制代码
from fastapi import FastAPI
from .tasks import add

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello World"}

@app.post("/add_task/")
def create_task(a: int, b: int):
    task = add.delay(a, b)  # 调用Celery任务
    return {"task_id": task.id}

tasks.py

python 复制代码
from celery import Celery

# 引入 Celery 配置
from .celery_config import celery_app

# 定义一个简单的任务
@celery_app.task
def add(a, b):
    return a + b

worker.py

python 复制代码
from .celery_config import celery_app

if __name__ == "__main__":
    celery_app.start()

运行

fastapi

python 复制代码
uvicorn main:app --host 0.0.0.0 --port 9000

celery

python 复制代码
celery -A app.worker worker -l info  -P solo -c 2

flower

python 复制代码
celery -A app.worker flower

测试

打开网址

点点就可以了

踩坑

无法运行 celery 命令

在写 demo 的 时候 为了便捷运行 , 笔者 将 fastapi,celery,flower 的运行 命令写在了三个 脚本文件里面 celery.cmd , runfastapi.bat , flower.cmd 运行时只有 runfastapi.bat 正确运行,其他两个脚本在控制台 无限重复运行,手动在控制台输入命令即可。【应该是与文件名有关 -_-!】

运行 celery 后电脑卡顿

与celery的命令参数有关 添加 -c 2 就好了。

无法运行 worker.py

不能直接运行 worker.py 文件,这个需要配合 celery 来运行滴

创建了许多 随机队列

查看这些随机队列,会自动删除,周期是 24h

| Features | | x-expires: | 86400000 | | auto-delete: | true | |--------------|----------| |
|----------|-------------------------------------------------------------------------------------|

相关推荐
张3蜂11 小时前
Python 四大 Web 框架对比解析:FastAPI、Django、Flask 与 Tornado
前端·python·fastapi
m0_6873998413 小时前
telnet localhost 15672 RabbitMQ “Connection refused“ 错误表示目标主机拒绝了连接请求。
分布式·rabbitmq
陌上丨13 小时前
生产环境分布式锁的常见问题和解决方案有哪些?
分布式
新新学长搞科研13 小时前
【智慧城市专题IEEE会议】第六届物联网与智慧城市国际学术会议(IoTSC 2026)
人工智能·分布式·科技·物联网·云计算·智慧城市·学术会议
Ronin30513 小时前
日志打印和实用 Helper 工具
数据库·sqlite·rabbitmq·文件操作·uuid生成
泡泡以安13 小时前
Scrapy分布式爬虫调度器架构设计说明
分布式·爬虫·scrapy·调度器
雪碧聊技术14 小时前
ORM简介、安装、使用流程
fastapi·orm·基础代码编写
没有bug.的程序员15 小时前
RocketMQ 与 Kafka 深度对垒:分布式消息引擎内核、事务金融级实战与高可用演进指南
java·分布式·kafka·rocketmq·分布式消息·引擎内核·事务金融
上海锟联科技15 小时前
250MSPS DAS 在地铁监测中够用吗?——来自上海锟联科技的工程实践
分布式·科技·分布式光纤传感·das解调卡·光频域反射·das
曲幽15 小时前
FastAPI实战:用懒加载与Lifespan优雅管理重型依赖
fastapi·async·lifespan·lazy loading·startup event