位置: IT常识 - 正文

celery的介绍和使用(celery eventlet)

编辑:rootadmin
celery介绍 celery是一个异步任务框架,它可以执行异步任务、延迟任务、定时任务 异步任务框架简述: 1)celery可以不依赖任何服务器,通过自身命令,启动服务(内部支持socket) 2)celery服务为为其他项目服务提供异步解决任务需求的 注:会有两个服务同时运行,一个是项目服务,一 ... celery介绍

推荐整理分享celery的介绍和使用(celery eventlet),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:celery用法,celery作用,celeryjuice,celeryjuice,celery使用场景,celery组成部分,celery用法,celery作用,内容如对您有帮助,希望把文章链接给更多的朋友!

celery是一个异步任务框架,它可以执行异步任务、延迟任务、定时任务

异步任务框架简述:

1)celery可以不依赖任何服务器,通过自身命令,启动服务(内部支持socket)2)celery服务为为其他项目服务提供异步解决任务需求的注:会有两个服务同时运行,一个是项目服务,一个是celery服务,项目服务将需要异步处理的任务交给celery服务,celery就会在需要时异步完成项目的需求Celery架构

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

消息中间件

Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等

任务执行单元

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

任务结果存储

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

使用场景

异步执行:解决耗时任务,将耗时操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音视频处理等等

延迟执行:解决延迟任务

celery的介绍和使用(celery eventlet)

定时执行:解决周期(周期)任务,比如每天数据统计

Celery的安装配置

pip install celery gevent

windows环境下启动celery

# module为python module名celery -A <module> worker -l info -P geventcelery执行异步任务

采用包架构封装(多任务结构)

在项目文件project下新建一个celery包

project ├── celery_task # celery包 │ ├── __init__.py # 包文件 │ ├── celery.py # celery连接和配置相关文件,且名字必须叫celery.py │ └── tasks.py # 所有任务函数 ├── add_task.py # 添加任务 └── get_result.py # 获取结果

celery.py

# 导入模块from celery import Celery# 指定任务中间件和任务处理仓库为redis里的第一个库,后面1表示第一个,2表示第二个。broker = 'redis://127.0.0.1:6379/1'backend = 'redis://127.0.0.1:6379/2'# backend='redis://:123456@127.0.0.1:6379/1' redis加密码写法# include列表里表示celery_task包里的task.py交给app处理app = Celery(__name__,broker=broker, backend=backend, include=['celery_task.tasks'])

task.py

from .celery import appimport time@app.task #添加该装饰器表示这个函数任务使用了celery框架的异步处理def add(n, m): print(n) print(m) time.sleep(10) print('n+m的结果:%s' % (n + m)) return n + m@app.taskdef low(n, m): print(n) print(m) print('n-m的结果:%s' % (n - m)) return n - m

add_task.py这个py文件是用来添加任务的,可以建在任意位置

from celery_task import tasks# 添加立即执行任务t1 = tasks.add.delay(10, 20)t2 = tasks.low.delay(100, 50)print(t1) # 获取的就是这个任务的id号# 添加延迟任务from datetime import datetime, timedeltaeta=datetime.utcnow() + timedelta(seconds=10)tasks.low.apply_async(args=(200, 50), eta=eta)

get_result.py这个py文件是用来获取任务处理的结果的

from celery_task.celery import appfrom celery.result import AsyncResultid = '21325a40-9d32-44b5-a701-9a31cc3c74b5' #输入任务的id号if __name__ == '__main__': async = AsyncResult(id=id, app=app) if async.successful(): #如果这个任务执行成功 result = async.get() #得到结果 print(result) elif async.failed(): print('任务失败') elif async.status == 'PENDING': print('任务等待中被执行') elif async.status == 'RETRY': print('任务异常后正在重试') elif async.status == 'STARTED': print('任务已经开始被执行')celery执行延迟任务

在add_task.py里书写:

# 添加延迟任务from datetime import datetime, timedelta# datetime.utcnow()表示获取当前的utc时间,timedelta(seconds=10)表示加10秒timedelta括号里之后是时间类型,可以相加减eta=datetime.utcnow() + timedelta(seconds=10)# 使用的是apply_async这个方法,tasks.add这个是函数名,args括号里是函数add需要传的参数,eta必须是utc时间tasks.add.apply_async(args=(200, 50), eta=eta)celery执行定时任务

将celery.py添加以下定时配置

# 导入模块from celery import Celery# 指定任务中间件和任务处理仓库为redis里的第一个库,后面1表示第一个,2表示第二个。broker = 'redis://127.0.0.1:6379/1'backend = 'redis://127.0.0.1:6379/2'# backend='redis://:123456@127.0.0.1:6379/1' redis加密码写法# include列表里表示celery_task包里的task.py交给app处理app = Celery(__name__,broker=broker, backend=backend, include=['celery_task.tasks'])# 定时任务配置# 时区app.conf.timezone = 'Asia/Shanghai'# 是否使用UTCapp.conf.enable_utc = False# 任务的定时配置from datetime import timedeltafrom celery.schedules import crontabapp.conf.beat_schedule = { 'add-task': { 'task': 'celery_task.tasks.add', # celery_task.tasks.low这个是你函数任务的位置,task是固定的 'schedule': timedelta(seconds=3), # 每隔三秒执行一次 # 'schedule': crontab(hour=8, day_of_week=1), # 每周一早八点 'args': (300, 150), # 函数任务需要传入的参数 }}

然后在终端下cd到scripts文件夹

执行celery -A celery_task beat表示开始定时发布任务

本文链接地址:https://www.jiuchutong.com/zhishi/313083.html 转载请保留说明!

上一篇:Apache RocketMQ 5.0 笔记

下一篇:织梦通过ID搜索出对应文章结果的实现办法(织梦如何采集文章)

  • 所得税月度申报
  • 年度减免税限额
  • 个体经营所得税核定征收2023标准
  • 印花税应计入什么账户
  • 普通发票被作废的话财务会发现吗
  • 员工的生日津贴怎么发
  • 无偿调入固定资产计提折旧吗
  • 流动负债占比低于50%,是什么结构类型
  • 委托开发票的证明怎么写
  • 应交税费明细表填制
  • 福利企业发放职工集资利息是不是要交个人所得税
  • 我国流转税主要包括
  • 公司银行利息要交税吗
  • 进项税过期不抵扣怎么写会计分录?
  • 一般纳税人在国家电子税务局里面如何添加银行账户
  • 没有外管证就开具了发票
  • 财务负责人和办税人员哪个责任大
  • 小微企业工会经费的减免政策2023
  • 业主委员会的收益
  • 基金管理人收取回扣
  • 跨期做账如何处理当事人
  • 营改增后城建税和教育费附加包含在哪里
  • win11怎么取消登录pin密码
  • 偶然所得怎么缴纳个人所得税免税
  • 签证费入什么科目
  • 进项票月初收到能抵上月
  • 超市开票收回的钱怎么算
  • smss.exe是干嘛的
  • php中数组的常用函数及用法
  • windows11怎么删除临时文件
  • linux7 nfs
  • 路由器怎么才能用
  • 未注销的坏账可以转出吗
  • php安装及使用教程
  • framework架构
  • 新企业会计准则是哪一年颁布的
  • thinkphp框架介绍
  • 油卡预付卡发票能入费用吗怎么入账
  • php数组转树
  • 增值税纳税申报表怎么填
  • 会计人员信息采集怎么看审核通过
  • 织梦cms官网
  • 织梦cms官网
  • 个体工商户纳税申抿
  • 哪些增值税可以免税
  • 同一个单位能否交五险
  • 小企业固定资产入账标准
  • 凭证类别的种类及限制条件
  • 公司购入的财务会计分录
  • 研发费用归集的主要范围有哪些
  • 长期股权投资的初始投资成本
  • 红冲凭证怎么做分录
  • 福利费的进项税额会计分录
  • 其他货币的账面价值包括
  • 现金管理办法的内容包括
  • 股东股权转让印花税 公司承担
  • 冲暂估成本怎么做分录
  • 总分包模式和总承包模式
  • 成本结转怎么结转
  • 直接收到货款也要走应收账款吗
  • 汽车4s店有哪些功能
  • Windows10下MySQL5.7.19安装教程 MySQL忘记root密码修改方法
  • 阿里云linux 服务器 字符集
  • win10显示请勿关闭电脑
  • win8系统怎样
  • win8怎么设置自启动
  • linux rsyslogd
  • shell产生随机字符串
  • mac安装android
  • python中文分词代码
  • unity 5.4
  • python的对象
  • js面向对象是什么意思
  • python列表的常用方法有哪些
  • jquery获取当前元素是第几个元素
  • 吉林省税务局发票查询真伪
  • 山东契税补贴政策2023年
  • 差旅费的补助计入哪个费用
  • 水利基金要收滞纳金吗
  • 监理费合同按什么计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设