Bootstrap

Flask-Celery

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 集成的概述。在实际应用中,你可能需要根据你的具体需求来调整配置和任务定义。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;