Python分布式异步任务框架Celery使用教程
简介
Celery是Python编写的分布式异步任务队列,是一个优秀的基于消息传递的任务队列。Celery支持任务调度和消息分发,可以根据用户的需求创建多个任务队列,优化用户的任务处理效率。
安装
安装Celery可以使用官方推荐的方式通过pip进行安装。例如:
pip install celery
安装好后,可以使用celery --version
命令来检查是否安装成功。
快速入门
第一步:创建任务
首先,你需要定义一个Celery任务。这个任务定义了这个任务需要执行一些什么操作。
# tasks.py
from celery import Celery
app = Celery('tasks', broker='pyamqp://guest@localhost//')
@app.task
def add(x, y):
return x + y
这个例子中,我们创建了一个名为add
的任务:这个任务完成两个数字相加的操作。这个任务需要使用Celery任务队列,因此我们首先通过Celery
类实例化一个Celery对象app
。在这个任务中,我们为这个任务显式地指定了经纪人的URL,以确保它能够正常工作。
第二步:运行Celery Worker
Celery提供了许多不同的进程选项,用于从应用程序中调用任务,以及运行需要任务队列的工作进程。你可以使用以下命令在终端中启动worker进程。
celery -A tasks worker --loglevel=info
其中,-A tasks
表示我们要在tasks.py
文件中查找任务;参数--loglevel=info
表示打印工作进程的详细信息。如果想在后台运行工人,请使用以下命令:
celery -A tasks worker --detach --loglevel=info
第三步:调用任务
在终端中,在Python shell中使用下面的调用代码。调用add()
函数,给它传递两个参数,并打印结果。
# python shell
from tasks import add
result = add.delay(4, 4)
print(result.get())
这里,我们使用delay()
调用了add()
函数,并传递两个参数。delay
会立即返回并让工作进程异步执行开销较大的操作。最后,使用result.get()
方法获取返回值。
示例1:发送email
# tasks.py
import smtplib
from email.mime.text import MIMEText
from celery import Celery
app = Celery('tasks', broker='pyamqp://guest@localhost//')
@app.task
def send_email(to, subject, body):
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = 'example@gmail.com'
msg['To'] = to
s = smtplib.SMTP('smtp.gmail.com', 587)
s.starttls()
s.login('example@gmail.com', 'password')
s.sendmail('example@gmail.com', to, msg.as_string())
s.quit()
这个例子中,我们创建了一个名为send_email
的任务:它需要使用邮件传递的方式,将邮件内容发送给指定的收件人。在这个任务中,我们使用email
模块创建了一个邮件消息。然后,我们使用工作进程异步地将这个邮件发送给了指定的收件人。
示例2:缩少图片
# tasks.py
import os
from PIL import Image
from celery import Celery
app = Celery('tasks', broker='pyamqp://guest@localhost//')
@app.task
def reduce_image_size(image_file_path):
with Image.open(image_file_path) as img:
img.thumbnail((800, 800))
img.save('thumbnail_' + os.path.basename(image_file_path))
这个例子中,我们创建了一个名为reduce_image_size
的任务:这个任务需要从文件系统中读取一张图片,然后按比例缩小尺寸,保存图片并写回到文件系统中。在这个任务中,我们首先使用Pillow
库中的Image.open()
方法打开图片,然后使用thumbnail()
方法缩小图片尺寸。最后,我们使用img.save()
方法将缩小的图片保存回文件系统。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python分布式异步任务框架Celery使用教程 - Python技术站