Python中celery的使用

下面是关于Python中Celery的使用的完整攻略。

1. 什么是Celery

Celery是一个基于分布式消息传递的任务队列,允许您异步地调用执行代码,作为生产者将任务委派给工作者(即消费者),以便长时间的运行任务可以在后台完成,同时允许使用者对前端进行操作。

2. 安装Celery

可以使用pip进行安装,命令如下:

pip install celery

3. Celery的基本使用

3.1 定义任务

首先,在Python中定义一个任务的方式非常简单,定义一个函数即可。例如:

from celery import Celery

app = Celery('demo', broker='redis://localhost:6379/0')

@app.task
def add(x, y):
    return x + y

这里我们定义了一个名为add的Celery任务。任务的返回值是两个给定数字相加的结果。@app.task用于将下一个函数声明为一个Celery任务。

3.2 启动Celery

celery -A proj worker -l info

在上面的命令中,“-A proj”是指项目的名称。"worker"是Celery的工作进程,用于执行工作单元。-l info是表示开启日志记录,只显示警告和信息。

3.3 调用任务

已定义任务后,就可以调用任务并异步地执行它。例如:

from demo import add

result = add.delay(4, 4)
print(result.get())

在这里,我们导入并调用了我们之前定义的add函数,然后将其异步调用并传入两个参数4和4. 使用result.get()来等待异步任务完成并获取结果。

4. 示例1:发送邮件任务

下面示例演示Celery在异步执行发送邮件任务中的应用,代码如下所示:

4.1 定义任务

# 在tasks.py或其他文件中定义
from celery import Celery
from celery.schedules import crontab
from django.conf import settings
from django.core.mail import send_mail
app = Celery('tasks', broker='pyamqp://guest@localhost//')

@app.task
def send_email(subject, message, recipient_list):
    send_mail(
        subject,
        message,
        settings.DEFAULT_FROM_EMAIL,
        recipient_list,
        fail_silently=False,
    )

定义了一个任务 send_email,当任务被执行时,将传递三个参数:邮件主题 subject,邮件内容 message,和邮件的接收人 recipient_list

4.2 启动Celery

celery -A proj worker -l info

4.3 调用任务

可以在你的Django视图函数或其他位置中通过以下方式来使用这个任务:

from tasks import send_email

result = send_email.delay('Test Subject', 'Test Message', ['test@example.com'])

在这里,我们使用了之前定义的 send_email 任务,我们将要发送的邮件主题、内容和接收人作为参数传递给它,并调用 .delay() 方法执行异步任务。

示例2:定时任务

下面示例演示了如何使用Celery和Flask来执行定期任务。代码如下所示:

5.1 定义任务

# 在tasks.py或其他文件中定义
import datetime
from celery import Celery

app = Celery('tasks', broker='pyamqp://guest@localhost//')

@app.task
def task():
    print('Executing task at %s' % datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

在这里,我们定义了一个简单的任务 task,在每次被调用时输出执行任务的时间戳

5.2 启动Celery

celery -A tasks beat
celery -A tasks worker

在这里,我们使用 beat 命令来启动 Celery 的定时任务调度器,然后使用 worker 命令启动 Celery 的工人进程,以便在任务队列中运行工作单元。

5.3 定义定时任务

# 在tasks.py或其他文件中定义
from celery import Celery
from celery.schedules import crontab

app = Celery('tasks', broker='pyamqp://guest@localhost//')

@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    sender.add_periodic_task(10.0, task.s(), name='add every 10')

@app.task
def task():
    # ...

我们使用 app.on_after_configure.connect() 来进行定时任务的设置,调用 sender.add_periodic_task() 来定义一个循环间隔为10秒的任务。

5.4 运行任务

最后,我们只需要启动 Celery 的工作进程即可:

celery -A proj worker -l info

现在,我们每十秒都会看到打印出当前执行任务的时间戳。

到这里,一个简单的示例就完成了,它演示了Celery在使用Python编写的应用程序中的异步执行和定期任务的应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中celery的使用 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • keras绘制acc和loss曲线图实例

    让我来详细讲解一下“keras绘制acc和loss曲线图实例”的完整攻略。 简介 Keras是一个基于Python的深度学习库,它能够在TensorFlow、Theano、Microsoft Cognitive Toolkit等深度学习框架上提供高层神经网络API。在训练深度学习模型时,我们需要了解模型的训练效果,通常通过监控模型在训练时的准确率(Acc)和…

    人工智能概论 2023年5月25日
    00
  • python购物车程序简单代码

    下面我将详细讲解“python购物车程序简单代码”的完整攻略: 一、需求分析 在开始编写代码之前,我们需要明确代码实现的需求,这里我们可以列出如下的需求: 用户可以添加商品到购物车中。 用户可以从购物车中删除商品。 用户每次添加、删除商品后,都可以查看当前的购物车情况。 用户可以随时退出程序。 二、代码实现 在明确了需求后,我们可以开始着手编写代码,下面是一…

    人工智能概论 2023年5月25日
    00
  • 苹果IOS9的30项新特性可能会被你忽略

    苹果IOS9的30项新特性可能会被你忽略 苹果IOS9发布后,增加了许多新的功能和特性。除了耳熟能详的功能外,还有许多你可能会忽略的实用功能。下面详细介绍这30项新特性,其中包含两个示例说明。 一. 内置应用的改进 Notes更加实用 新版Notes拥有更多实用功能,如手写板、绘图、添加照片等。此外,Notes中的文字现在可以上下左右调整。 《示例说明1》:…

    人工智能概论 2023年5月25日
    00
  • Win10下python 2.7.13 安装配置方法图文教程

    Win10下Python 2.7.13安装配置方法图文教程 下载Python安装包 首先,我们需要从官方网站(https://www.python.org/downloads/)下载Python 2.7.13的安装包。根据你的Windows操作系统版本选择合适的32位或64位的安装包,下载完成后进行安装。 安装Python 运行安装包,按照步骤进行安装。在安…

    人工智能概览 2023年5月25日
    00
  • 一文搞懂Scrapy与MongoDB交互过程

    一文搞懂Scrapy与MongoDB交互过程 在使用Scrapy进行数据爬取的过程中,我们经常需要将爬取下来的数据存储到数据库中。MongoDB是一个非常流行的NoSQL数据库,它与Scrapy的交互非常方便。本文将介绍如何在Scrapy中使用MongoDB进行数据存储。 安装MongoDB 在使用MongoDB之前,需要先安装MongoDB数据库。可以通过…

    人工智能概论 2023年5月25日
    00
  • 详解django自定义中间件处理

    当我们使用 Django 时,它通常会根据请求接收到的HTTP头文件(Headers),响应一个HttpResponse对象。但是,我们可能希望在web应用程序的处理请求和响应过程中添加自己的代码逻辑。这时,中间件的概念就出现了。 什么是中间件 中间件是在请求和响应过程中,在Django框架处理请求和响应对象之间执行的可重用组件。中间件可以拦截请求、修改请求…

    人工智能概论 2023年5月25日
    00
  • Pytorch实现ResNet网络之Residual Block残差块

    下面是Pytorch实现ResNet网络之Residual Block残差块的完整攻略。 Residual Block(残差块) ResNet是一种深度残差网络,使用了残差学习来解决深度神经网络中的梯度消失和梯度爆炸问题。ResNet的基础结构是残差块(Residual Block)。 一个普通的神经网络中,输入数据通过一系列的权重、偏置、激活函数等层的处理…

    人工智能概论 2023年5月25日
    00
  • nodejs教程之环境安装及运行

    下面是关于“nodejs教程之环境安装及运行”的完整攻略。 环境安装 下载安装包 首先,在官网(https://nodejs.org/)上下载相应版本的安装包。 Windows系统 下载后,双击安装包进行安装。根据安装程序中的指示,一步步进行安装即可。 Linux系统 对于Linux系统,可以通过包管理器进行安装。 Ubuntu/Debian 对于Ubunt…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部