记录在 Flask 项目中使用 Redis 实现任务队列的配置与示例,这里选用 RQ
(Redis Queue)作为任务处理库。
一、安装依赖
pip install redis rq
需要确保 Redis 服务已启动(默认端口 6379)。
二、项目结构示例
myapp/
├── app.py
├── tasks.py
三、任务定义(tasks.py)
import time
def background_task(n):
print(f"开始任务 {n}")
time.sleep(n)
print(f"任务 {n} 完成")
return f"任务 {n} 完成"
四、Flask 主程序(app.py)
from flask import Flask, request, jsonify
from redis import Redis
from rq import Queue
from tasks import background_task
app = Flask(__name__)
redis_conn = Redis()
task_queue = Queue(connection=redis_conn)
@app.route('/add-task', methods=['POST'])
def add_task():
seconds = int(request.form.get('seconds', 5))
job = task_queue.enqueue(background_task, seconds)
return jsonify({"job_id": job.get_id()})
@app.route('/task-status/<job_id>')
def task_status(job_id):
job = task_queue.fetch_job(job_id)
if job:
return jsonify({"status": job.get_status(), "result": job.result})
return jsonify({"error": "任务不存在"}), 404
五、启动 Worker
在项目根目录执行:
rq worker
Worker 会监听队列并执行任务。
六、运行流程
- 启动 Redis 服务
- 启动 Flask 应用
- 启动 RQ Worker
- 调用
/add-task
添加任务 - 通过
/task-status/<job_id>
查询任务状态
七、小结
- RQ 使用简单,适合中小型异步任务场景
- Redis 提供持久化与多 worker 支持
- 适合延迟执行、后台计算、批量任务等需求