celery学习使用示例

官方文档

celery官方文档
参考文档:https://blog.csdn.net/qiulin_wu/article/details/106119757

功能介绍

Celery是一个异步任务队列。它可以用于需要异步运行的任何内容。RabbitMQ是Celery广泛使用的消息代理。

使用实践

broker

为什么我们需要broker呢?这是因为Celery本身并不构造消息队列,所以它需要一个额外的消息传输来完成这项工作。这里可以将Celery看作消息代理的包装器。
如果使用redis,大家可以参考这里:celery使用redis作为broker示例

安装和启动rabbitmq

可以借助docker安装,参考文档:docker安装mq

celery安装和运行

  1. 安装
pip install celery
  1. 创建项目并引入celery
    tasks.py
from __future__ import absolute_import, unicode_literals

import time

from celery import Celery

app = Celery('tasks',
             broker='amqp://guest@localhost//',
             backend='rpc://',
             include=['test_celery.tasks']
             )

app.conf.update(
    result_expires=3600,
)


@app.task(name='mytask')
def add(x, y):
    print("start run add x={},y={}".format(x, y))
    ret = x + y
    time.sleep(5)
    print("end run ret = {}".format(ret))
    return ret


if __name__ == '__main__':
    result = add.delay(1, 1)
    # 此时,任务还未完成,它将返回False
    print('Task finished? ', result.ready())
    print('Task result: ', result.result)
    # 延长到10秒以确保任务已经完成
    time.sleep(10)
    # 现在任务完成,ready方法将返回True
    print('Task finished? ', result.ready())
    print('Task result: ', result.result)

代码解释:
在这里,初始化了一个名为app的Celery实例,将用于创建一个任务。Celery的第一个参数只是项目包的名称或者py文件的名称,即“tasks”。

broker参数指定代理URL,对于RabbitMQ,传输是amqp。

backend参数指定后端URL。Celery中的后端用于存储任务结果。因此,如果需要在任务完成时访问任务的结果,应该为Celery设置一个后端。

rpc:// 意味着将结果作为AMQP消息发送回去,这对本次演示来说是一种可接受的格式。

include参数指定了在Celery工作程序启动时要导入的模块列表。我们在这里添加了tasks模块,以便找到我们的任务。

@app.task(name=‘mytask’)装饰器,name参数指定任务名称。

add.delay(1, 1)对方法进行调用。

  1. 启动
celery -A test_celery.tasks worker --loglevel=info

在这里插入图片描述

  1. 终止服务
    ctrl+c
  2. 调用
    运行tasks.py中的main方法

这里,我们使用delay方法调用任务add(),如果我们想异步处理任务,就需要使用delay方法。此外,保存任务的结果并打印一些信息。如果任务已经完成,ready方法将返回True,否则返回False。result属性是任务的结果,如果任务尚未完成,则返回None

运行结果
控制台
控制台的输出结果
celery的启动窗口
在这里插入图片描述
接收到任务后打印任务名称和id

Received task: mytask[6c0fd268-1649-40fd-88c1-a1d91bae6176]

task方法中的打印

start run add x=1,y=1
end run ret = 2

最后一行表示任务执行完成

Task mytask[6c0fd268-1649-40fd-88c1-a1d91bae6176] succeeded in 5.041684367s: 2

后台启动

  1. 启动
celery multi start w1 -A proj -l info
  1. 停止
celery multi stop w1 -A proj -l info#但是并不优雅,不会等待当前任务执行完成
  1. 优雅停止
celery multi stopwait w1 -A proj -l info
  1. 重启
celery  multi restart w1 -A proj -l info

celery监控

Flower是一款基于网络的Celery实时监控软件。使用Flower,可以轻松地监视任务进度和历史记录.

安装和启动

pip install flower
celery -A test_celery.tasks flower

在这里插入图片描述
在这里插入图片描述

结语

本示例比较简单和基础,是我在初学的时候借鉴和参考其他人文档之后总结的经验供自己学习和记录,如果能够帮到大家更好了。后面在项目中实践使用之后,会出一个更加详细的项目使用案例。

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
当然,我可以给你一个简单的 Celery 使用示例Celery 是一个强大的分布式任务队列框架,常用于处理异步任务和定时任务。 首先,你需要安装 Celery。你可以使用 pip 命令来安装: ```bash pip install celery ``` 接下来,创建一个 Celery 应用。在你的项目中创建一个名为 `tasks.py` 的文件,并添加以下内容: ```python from celery import Celery # 创建 Celery 应用 app = Celery('tasks', broker='redis://localhost:6379/0') # 定义任务 @app.task def add(x, y): return x + y ``` 这里我们使用了 Redis 作为消息代理(broker),你也可以选择其他的消息代理,比如 RabbitMQ。 接下来,在你的项目根目录下创建一个名为 `celery_worker.py` 的文件,并添加以下内容: ```python from tasks import app # 启动 Celery 工作进程 if __name__ == '__main__': app.worker_main() ``` 现在,你可以启动 Celery 工作进程了。打开终端,进入你的项目根目录,运行以下命令: ```bash celery -A celery_worker worker --loglevel=info ``` 这样,Celery 工作进程就会启动并开始监听任务了。 最后,你可以在你的代码中调用 `add` 任务,示例如下: ```python from tasks import add result = add.delay(4, 6) # 异步调用任务 print(result.get()) # 获取任务结果 ``` 这样就完成了一个简单的 Celery 使用示例。你可以根据自己的需求定义更多的任务,并在你的代码中调用它们。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值