iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python中celery的基本使用详情
  • 495
分享到

python中celery的基本使用详情

2024-04-02 19:04:59 495人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1.基本介绍2.使用场景3.工作流程和组成部分4.Celery执行异步任务4.1 基础使用1.基本介绍 Celery 是由python 编写的简单,灵活,可靠的用来处理大量信息的

1.基本介绍

Celery 是由python 编写的简单,灵活,可靠的用来处理大量信息的分布式系统,它同时提供操作和维护分布式系统所需的工具Celery 专注于实时任务处理,支持任务调度。

简单的说,它就是一个分布式队列的管理工具,用celery提供的接口快速实现并管理一个分布式的任务队列。

有一点我们需要搞清楚,Celery 本身并不是任务队列,它是一个分布式队列的管理工具,Celery封装好了操作常见任务队列的各种操作,比如说从监听某个任务队列并从该队列中拿到数据进行消费。

2.使用场景

它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务(async task)和定时任务(crontab)。

  • 异步任务: 将耗时操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音视频处理等等
  • 定时任务: 定时执行某件事情,比如每天数据统计

3.工作流程和组成部分

这里用一张图片说明下:

Celery的架构由三部分组成,消息中间件message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。

消息中间件:

Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括RabbitMQ, Redis等等,官方推荐用rabbitMQ,因为它持久稳定。

任务执行单元:

WorkerCelery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。

任务结果存储:

Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis

另外, Celery还支持不同的并发和序列化的手段。

并发:Prefork, Eventlet, gevent, threads/single threaded

序列化:pickle, JSON, yaml, msgpack. zlib, bzip2 compression, Cryptographic message signing 等等 先安装模块

pip install celery
pip install redis

4.Celery执行异步任务

4.1 基础使用

这里项目结构如下:

第一步:先创建celery相关配置配置celery_object.py

import celery

# 执行如下命令: celery -A celery_object worker -l info

backend = "redis://127.0.0.1:6379/4"  # 设置redis的4号数据库来存放结果
broker = "redis://127.0.0.1:6379/5"  # 设置redis的5号数据库存放消息中间件
celery_app = celery.Celery(
    "celery_demo",
    backend=backend,
    broker=broker,
    include=[
        "celery_task",
    ],
)

celery_app.conf.task_serializer = "json"
celery_app.conf.result_serializer = "json"
celery_app.conf.accept_content = ["json"]

celery_app.conf.timezone = "Asia/Shanghai"  # 时区
celery_app.conf.enable_utc = False  # 是否使用UTC

参数说明:

  • backend 就是异步任务执行完成以后,结果存放的地方。
  • broker 就是具体执行任务的工作节点。
  • celery.Celery()方法是实例化一个celery对象。

第二步:创建任务相关的文件celery_task.py

import time

from celery_object import celery_app

@celery_app.task
def send_email(name):
    print("向%s发送邮件..." % name)
    time.sleep(5)
    print("向%s发送邮件完成" % name)
    return f"成功拿到{name}发送的邮件!"

@celery_app.task
def send_msg(name):
    print("向%s发送短信..." % name)
    time.sleep(5)
    print("向%s发送短信完成" % name)
    return f"成功拿到{name}发送的短信!"

通过@celery_app.task这样的装饰器,成功的把对应的函数变成对应celery的异步worker函数。

紧接着我们在项目当前所在的目录执行命令:

celery -A celery_object worker -l info
  • -A 指的是application应用对象
  • worker 就是工作人(固定写法)
  • -l 指的是日志级别,这里是打印info级别的日志

之后就可以有下面的输出显示就代表celery动成功:

之后我们就可以向celery生产任务了,创建produce_result.py文件。

from celery_task import send_email, send_msg

if __name__ == "__main__":
    for i in range(10):
        result = send_email.delay(f"张三{i}")
        print(result.id)
        result2 = send_msg.delay(f"李四{i}")
        print(result2.id)

运行生产任务的程序,会看到如下的数据,这里打印的就是任务ID。

然后在终端可以看到下面的东西,就代表celery成功的拿到队列中任务 并进行消费了。

然后打开我们的redis可以看到有对应的数据记录。

与此同时 我们还可以查看celery任务ID的状态check_result.py写入如下:

from celery.result import AsyncResult
from celery_object import celery_app

async_result = AsyncResult(id="d1c722fa-4ebf-432e-967e-a462bdefeac4", app=celery_app)
print("任务状态:", async_result.status)
if async_result.successful():
    result = async_result.get()
    print(result)
    # result.forget() # 将结果删除
elif async_result.failed():
    print("执行失败")
elif async_result.status == "PENDING":
    print("任务等待中被执行")
elif async_result.status == "RETRY":
    print("任务异常后正在重试")
elif async_result.status == "STARTED":
    print("任务已经开始被执行")

运行结果:

任务状态: SUCCESS
成功拿到李四0发送的短信!

到此这篇关于Python中celery的基本使用详情的文章就介绍到这了,更多相关python celery内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python中celery的基本使用详情

本文链接: https://www.lsjlt.com/news/120671.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python中celery的基本使用详情
    目录1.基本介绍2.使用场景3.工作流程和组成部分4.Celery执行异步任务4.1 基础使用1.基本介绍 Celery 是由Python 编写的简单,灵活,可靠的用来处理大量信息的...
    99+
    2024-04-02
  • Java中JSR303的基本使用详情
    目录1.关于JSR-3032. 基本使用3. 级联验证4. 分组验证4.1定义接口,充当标识4.2 指定校验的组5. 组序列6. 自定义校验注解7. 校验结果的处理7.1 全局异常处...
    99+
    2024-04-02
  • Python中celery的使用
    目录 Celery简介celery的异步任务1.安装celery2.安装redis3.使用ceelryDjango中使用celery1.创建celery文件2.添加cele...
    99+
    2024-04-02
  • Vue 组件化基本使用详情
    目录1、什么叫做组件化 2、基本使用前言: 有时候有一组html结构的代码,并且这个上面可能还绑定了事件。然后这段代码可能有多个地方都被使用到了,如果都是拷贝来拷贝去,很多代码都是重...
    99+
    2024-04-02
  • Springboot-Shiro基本使用详情介绍
    目录一、依据官网快速搭建Quickstart1.1 配置pom.xml依赖1.2配置log4j.properties1.3 配置shiro.ini1.4启动类二、springboot...
    99+
    2024-04-02
  • Vue.js自定义指令的基本使用详情
    目录函数式对象式使用时的一些坑总结函数式 需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍 <div id="root"> &l...
    99+
    2024-04-02
  • Python中字符串的基本使用详解
    目录前言1 字符串索引1.1 循环索引字符2 字符使用2.1 字符串运算3 字符串切片3.1 切片方法4 字符串格式化总结前言 除了数字,Python中最常见的数据类型就是字符串,无...
    99+
    2024-04-02
  • Python中的Unittest基本使用
    前言: Unittest又名单元测试,主要用于测试自己写的代码的正确性和完备性,也方便自己和他人对代码的维护。在软件开发过程中,测试驱动开发的理念是一种好的开发习惯。 例如现在我们写...
    99+
    2024-04-02
  • Python中JSON的基本使用
    JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它主要提供了四个方法: dumps、dump、loads、l...
    99+
    2023-01-31
    Python JSON
  • Python中Selenium的基本使用
    目录 一、Selenium是什么? 二、使用步骤   1.引入库   2.下载浏览器驱动   3.配置浏览器驱动    4.创建WebDriver对象   4.1.options    4.2.service   4.3...
    99+
    2023-09-29
    selenium python
  • python 中的requirements.txt 文件的使用详情
    目录实战场景生成 requirements.txt 文件潜在问题使用 requirements.txt 文件的好处备注使用 pip-compile实战场景 在部署Python应用时,...
    99+
    2024-04-02
  • Python中的Networkx的基本使用
    目录1. 安装Networkx2. Networkx的基本使用2.1 导入networkx2.2 创建Graph2.3 给Graph添加边2.4 Graph基本信息获取2.5 Gra...
    99+
    2023-02-14
    Python中Networkx Python Networkx详解 Python中Networkx使用
  • Python 中 logging 模块使用详情
    目录1.为什么要用logging模块2.logging模块介绍3.基础设置1.为什么要用logging模块 在实际应用中,日志文件十分重要,通过日志文件,我们知道程序运行的细节;同时...
    99+
    2024-04-02
  • Python多进程的使用详情
    目录一、进程的创建1、一些常用方法介绍 二、进程池的使用三、多进程和多线程的优缺点对比 一、进程的创建 Python的multiprocessing模块提供了Process类,该类可...
    99+
    2024-04-02
  • Python多线程的使用详情
    目录一,实用方法二、补充:Python多线程共享变量资源竞争问题一,实用方法 1.线程之间执行是无序的,cpu调度哪个线程就执行哪个线程;2.主线程等待所有子线程结束后再结束,设置守...
    99+
    2024-04-02
  • python-pptx的基本使用
    1.引入python-pptx frompptximportpresentation # 实例化Presentation prs= Presentation() 2.ppt模板的选择 a、使用ppt自带的模板 prs= Presen...
    99+
    2023-01-31
    python pptx
  • python中gevent库的用法详情
    目录前言: 1、gevent库可以轻松实现并发同步或异步编程。gevent中使用的主要模式是Greenlet,它是以C扩展模块的形式访问Python的轻量级协程。2、Greenlet...
    99+
    2024-04-02
  • Python推导式使用详情
    目录推导式什么是推导式基本语法其它使用方法列表推导式练习题集合推导式字典推导式字典推导式常用以配合的函数enumeratezip优先使用推导式推导式 什么是推导式 推导式是 for ...
    99+
    2024-04-02
  • 一文详解Golang中consul的基本使用
    目录consulconsul的安装和部署docker安装consul镜像的启动启动一个tcp_health_check的服务注册http版服务发现consul consul是一个开源...
    99+
    2023-03-06
    Golang consul使用 Golang consul Go consul
  • Python爬虫Requests库的使用详情
    目录一、Requests库的7个主要的方法二、Response对象的属性三、爬取网页通用代码四、Resquests库的常见异常五、Robots协议展示六、案例展示一、Requests...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作