Flask-Celery示例项目教程
项目介绍
Flask-Celery示例项目是一个展示如何在Flask应用中集成和使用Celery进行异步任务处理的示例代码库。该项目由Miguel Grinberg开发,旨在帮助开发者理解如何通过Celery管理后台任务,如发送电子邮件或执行其他耗时操作。
项目快速启动
环境准备
- 安装Python和pip。
- 克隆项目仓库:
git clone https://github.com/miguelgrinberg/flask-celery-example.git cd flask-celery-example
安装依赖
- 安装项目依赖:
pip install -r requirements.txt
配置Celery
- 在Flask应用中配置Celery:
from flask import Flask from celery import Celery def make_celery(app): celery = Celery( app.import_name, broker=app.config['CELERY_BROKER_URL'], backend=app.config['CELERY_RESULT_BACKEND'] ) celery.conf.update(app.config) return celery app = Flask(__name__) app.config.update( CELERY_BROKER_URL='redis://localhost:6379/0', CELERY_RESULT_BACKEND='redis://localhost:6379/0' ) celery = make_celery(app)
启动应用
-
启动Redis服务器:
./run-redis.sh
-
启动Celery worker:
celery -A app.celery worker --loglevel=info
-
启动Flask应用:
flask run
应用案例和最佳实践
异步发送邮件
在Flask应用中,可以使用Celery异步发送邮件,避免阻塞主应用线程。以下是一个示例:
@celery.task
def send_async_email(msg):
with app.app_context():
mail.send(msg)
定时任务
使用Celery的beat
功能可以定时执行任务。例如,每天清理日志文件:
@celery.task
def clean_logs():
# 清理日志文件的逻辑
pass
app.conf.beat_schedule = {
'clean-logs-every-day': {
'task': 'app.clean_logs',
'schedule': crontab(hour=0, minute=0),
},
}
典型生态项目
Redis
Redis作为Celery的broker和backend,用于存储任务队列和任务结果。
Flask-Mail
Flask-Mail扩展用于在Flask应用中发送邮件,结合Celery可以实现异步邮件发送功能。
SQLAlchemy
SQLAlchemy作为Flask应用的数据库ORM,可以与Celery任务集成,实现数据库操作的异步处理。
通过以上步骤和示例,您可以快速启动并运行Flask-Celery示例项目,并了解如何在实际应用中使用Celery进行异步任务处理。