Flask-Celery 是一个 Flask 扩展,它将 Flask 应用程序与 Celery 任务队列系统集成在一起。Celery 是一个异步任务队列/作业队列,用于在分布式系统中处理并发任务。Flask-Celery 使得在 Flask 应用中使用 Celery 变得更加简单。
安装 Flask-Celery
首先,你需要安装 Flask-Celery。使用 pip 安装:
pip install Flask-Celery
创建 Flask 应用
创建一个新的 Flask 应用:
from flask import Flask
from flask_celery import make_celery
app = Flask(__name__)
celery = make_celery(app)
@app.route('/')
def index():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
定义任务
在 Flask 应用中,你可以定义 Celery 任务。这些任务通常在 tasks.py
文件中定义。
from celery import task
from celery.decorators import periodic_task
from celery.task.schedules import crontab
@task
def add(x, y):
return x + y
@periodic_task(run_every=crontab(minute='*/1'))
def periodic_add():
print('Periodic add task executed')
执行任务
在 Flask 视图函数中,你可以调用这些任务:
from flask import Flask, jsonify
from tasks import add
app = Flask(__name__)
celery = make_celery(app)
@app.route('/add', methods=['POST'])
def add_task():
x = int(request.json.get('x', 0))
y = int(request.json.get('y', 0))
task = add.delay(x, y)
return jsonify({'task_id': task.id}), 202
if __name__ == '__main__':
app.run()
查询任务结果
你可以使用任务 ID 来查询任务的状态和结果:
from tasks import add
task = add.apply_async(args=(4, 4))
result = task.get()
print(result) # 输出: 8
运行 Celery worker
最后,你需要启动 Celery worker 来处理任务:
celery -A tasks worker --loglevel=info
这个命令会启动一个 Celery worker 进程,它会监听任务队列并执行任务。
注意事项
- 确保你的消息代理(如 Redis 或 RabbitMQ)正在运行。
- 如果你使用的是 Windows 系统,Celery 不支持直接在 Windows 上运行 worker,你需要使用一个兼容的操作系统或者使用 Docker 等容器化技术。
- 在生产环境中,你可能需要配置多个 worker 并考虑使用监督器(如 supervisord)来管理它们。
这个教程提供了一个基本的 Flask-Celery 集成的概述。在实际应用中,你可能需要根据你的具体需求来调整配置和任务定义。