
-
目标
把“算斐波那契”扔后台,页面秒回任务 ID,5 分钟搞定。 -
目录(全部 4 个文件)
.
├── requirements.txt # 依赖
├── app.py # 所有代码
├── api.http # REST-Client 测试
└── readme.md # 启动命令
- 文件内容(直接复制即可)
requirements.txt
Flask==2.3.3
celery==5.3.4
redis==5.0.1
python-dotenv==1.0.0
app.py
# 安装依赖:
# pip install flask celery redis
# 运行方式:
# 1) 先启 Redis(默认 localhost:6379)
# redis-server
# 2) 启动 Celery worker(在项目目录下执行)
# celery -A this_file_name:celery worker --loglevel=info
# 3) 另开终端启动 Flask
# python this_file_name.py
# 4) 浏览器访问 http://127.0.0.1:5000/?n=8
# 后台会异步计算斐波那契数,页面立即返回任务 ID。
from flask import Flask, request, jsonify
from celery import Celery
app = Flask(__name__)
# Celery 配置(使用 Redis 当 broker 和 backend)
app.config["CELERY_BROKER_URL"] = "redis://localhost:6379/0"
app.config["CELERY_RESULT_BACKEND"] = "redis://localhost:6379/0"
# 初始化 Celery
celery = Celery(app.name, broker=app.config["CELERY_BROKER_URL"])
celery.conf.update(app.config)
# 定义一个异步任务
@celery.task(bind=True)
def fib(self, n: int) -> int:
"""计算斐波那契数(演示用)"""
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
# 一个简单路由,接收参数 n,把任务丢给 Celery
@app.route("/")
def index():
try:
n = int(request.args.get("n", 10))
except ValueError:
return "参数 n 必须是整数", 400
task = fib.delay(n)
return jsonify(task_id=task.id)
# 可选:查询任务结果
@app.route("/result/<task_id>")
def result(task_id):
task = fib.AsyncResult(task_id)
if task.ready():
return jsonify(status="SUCCESS", result=task.result)
return jsonify(status="PENDING")
if __name__ == "__main__":
app.run(debug=True)
api.http
### 计算斐波那契数列第10项
GET http://127.0.0.1:5000/?n=10
Accept: application/json
### 使用默认参数 n=10 计算斐波那契数列
GET http://127.0.0.1:5000/
Accept: application/json
### 计算斐波那契数列第15项
GET http://127.0.0.1:5000/?n=15
Accept: application/json
### 计算斐波那契数列第5项
GET http://127.0.0.1:5000/?n=5
Accept: application/json
### 测试无效参数(应返回400错误)
GET http://127.0.0.1:5000/?n=abc
Accept: application/json
### 查询任务执行结果(需替换 {task_id} 为实际返回的task_id)
GET http://127.0.0.1:5000/result/ {task_id}
Accept: application/json
readme.md
# 启动命令
# 创建并激活 venv
python3 -m venv .venv
source .venv/bin/activate # Windows 用 .venv\Scripts\activate
# 装包
pip install -r requirements.txt
# 终端 A:启动 celery worker
celery -A app.celery worker --loglevel=info
# 终端 B:启动 flask
python app.py
- 一键跑(完整复制)
# 1. 创建并激活 venv
python3 -m venv .venv
source .venv/bin/activate # Windows 用 .venv\Scripts\activate
# 2. 装依赖
pip install -r requirements.txt
# 3. 开两个终端
# 终端 A ── 启动 celery
celery -A app.celery worker --loglevel=info
# 终端 B ── 启动 flask
python app.py
-
测试
浏览器或 REST 客户端访问:
http://127.0.0.1:5000/?n=10
→ 立即拿到任务 ID
http://127.0.0.1:5000/result/<task_id>
→ 拿到结果 55 -
收工
页面秒响应,计算在后台。
以我之思,借AI之力
1225

被折叠的 条评论
为什么被折叠?



