介绍
随着Web应用程序的发展和使用的增加,用例也变得多样化。我们现在正在建设和使用网站来执行比以往任何时候都更复杂的任务。其中一些任务可以进行处理,并将反馈立即转发给用户,而其他任务则需要稍后进行进一步处理和结果转发。越来越多地采用Internet访问和支持Internet的设备导致最终用户流量增加。
在本文中,我们将探讨Celery在Flask应用程序中安排后台任务的使用,以减轻资源密集型任务的负担并确定对最终用户的响应的优先级。
什么是任务队列?
任务队列是一种分配小的工作单元或任务的机制,可以在不干扰大多数基于Web的应用程序的请求-响应周期的情况下执行这些任务。
任务队列有助于委派工作,否则将在等待响应时降低应用程序的速度。它们还可以用于在主机或进程与用户交互时处理资源密集型任务。
示范
我们将构建一个Flask应用程序,该应用程序允许用户设置提醒,该提醒将在设定的时间传递到他们的电子邮件中。
我们还将提供自定义消息或提醒被调用并将消息发送给用户之前的时间的功能。
设定
与其他项目一样,我们的工作将在虚拟环境中进行 :
$ pipenv install --three
$ pipenv shell
对于此项目,我们将需要安装Flask和Celery软件包以开始:
$ pipenv install flask celery
我们的Flask应用程序文件结构如下所示:
.
├── Pipfile #管理我们的环境
├── Pipfile.lock
├── README.md
├── __init__.py
├── app.py # Flask应用程序的主要实现
├── config.py # 托管配置
├── requirements.txt # 储存我们的要求
└── templates
└── index.html # 登陆页面
1 directory, 8 files
让我们从创建Flask应用程序开始,该应用程序将呈现一个表单,该表单允许用户输入将来发送的消息的详细信息。
我们将以下内容添加到我们的app.py
文件中:
from flask import Flask, flash, render_template, request, redirect, url_for
app = Flask(__name__)
app.config.from_object("config")
app.secret_key = app.config['SECRET_KEY']
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'GET':
return render_template('index.html')
elif request.method == 'POST':
email = request.form['email']
first_name = request.form['first_name']
last_name = request.form['last_name']
message = request.form['message']
duration &#