celery介绍和安装, celery快速使用, celery包结构

1|0celery介绍和安装, celery快速使用, celery包结构

1|1celery介绍和安装

1|0celery它是一个分布式异步框架,celery翻译过来是"芹菜"的意思
1.完成异步任务:可以提高项目的并发量,之前开启线程,现在使用celery, 2.完成延迟任务 3.完成定时任务
# 理解celery的运行原理 1)可以不依赖任何服务器,通过自身命令,启动服务 2)celery服务为为其他项目服务提供异步解决任务需求的 注:会有两个服务同时运行,一个是项目服务,一个是celery服务,项目服务将需要异步处理的任务交给celery服务,celery就会在需要时异步完成项目的需求 # 我们可以这样来理解 人是一个独立运行的服务 | 医院也是一个独立运行的服务 正常情况下,人可以完成所有健康情况的动作,不需要医院的参与;但当人生病时,就会被医院接收,解决人生病问题 人生病的处理方案交给医院来解决,所有人不生病时,医院独立运行,人生病时,医院就来解决人生病的需求

1|2架构

celery架构 1.任务中间件:broker(中间件),其他服务提交的异步任务,抖放在这里,celery本身是不提供中间件的,需要借助于第三方 2.任务执行单元:worker,真正执行任务的地方,一个个进程,执行函数 3.结果存储:backend,函数return的结果存储在这里,celery本身不提供结果存储,借助于第三方:redis,数据库,rabbitmq

img

1|3celery快速使用

1.celery官网:http://www.celeryproject.org/
第一步:新建 main.py from celery import Celery broker = 'redis://127.0.0.1:6379/1' backend = 'redis://127.0.0.1:6379/2' app = Celery('test',broker=broker,backend=backend) @app.task def add(a,b): import time time.sleep(3) print(a+b,'------') return a+b
第二步:其他程序,提交任务 from main import add # 同步调用 # res = add(5,6) # print(res) # 异步调用 res = add.delay(5,6) print(res) # 2abff7cc-2a84-4c9e-ba24-73f8777a8c6d
第三步:启动worker # 启动worker命令,win需要安装eventlet (luffy) D:\pythonProject\luffy_api2\scripts\celery>celery -A main worker -l info -P eventlet
第四步:worker会执行消息中间件中的任务,把结果存起来 第五步:拿执行的结果 from main import app from celery.result import AsyncResult id = '2abff7cc-2a84-4c9e-ba24-73f8777a8c6d' if __name__ == '__main__': a = AsyncResult(id=id, app=app) if a.successful(): # 执行完了 result = a.get() # print(result) elif a.failed(): print('任务失败') elif a.status == 'PENDING': print('任务等待中被执行') elif a.status == 'RETRY': print('任务异常后正在重试') elif a.status == 'STARTED': print('任务已经开始被执行')

image

1|4celery包结构

project ├── celery_task # celery包 │ ├── __init__.py # 包文件 │ ├── celery.py # celery连接和配置相关文件,且名字必须叫celery.py │ └── tasks.py # 所有任务函数 ├── add_task.py # 添加任务 └── get_result.py # 获取结果
第一步:新建包 celery_task from celery import Celery broker = 'redis://127.0.0.1:6379/1' backend = 'redis://127.0.0.1:6379/2' app = Celery('test', broker=broker, backend=backend, include=['celery_task.order_task', 'celery_task.user_task'])
第二步:在包内部,写task,任务异步任务 # order_task from .celery import app import time @app.task def add(a, b): print('-----', a + b) time.sleep(2) return a + b
# user_task from .celery import app import time @app.task def send_sms(phone, code): print("给%s发送短信成功,验证码为:%s" % (phone, code)) time.sleep(2) return True
第三步:启动worker ,包所在目录下 celery -A celery_task worker -l info -P eventlet
第四步:其他程序 提交任务,被提交到中间件中,等待worker执行,因为worker启动了,就会被worker执行 from celery_task import send_sms res=send_sms.delay('1999999', 8888) print(res)
第五步:worker执行完,结果存到backend中
第六步:查看结构 from celery_task import app from celery.result import AsyncResult id = '7d39033c-4cc7-4af2-8d78-e62c277db183' if __name__ == '__main__': a = AsyncResult(id=id, app=app) if a.successful(): # 执行完了 result = a.get() # print(result) elif a.failed(): print('任务失败') elif a.status == 'PENDING': print('任务等待中被执行') elif a.status == 'RETRY': print('任务异常后正在重试') elif a.status == 'STARTED': print('任务已经开始被执行')

__EOF__

本文作者泡芙有点甜
本文链接https://www.cnblogs.com/zx0524/p/17196492.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   小王应该在学习!  阅读(100)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示