# celery:(芹菜),分布式 异步任务 框架 ,对win支持不好
Celery is a project with minimal funding, so we don’t support Microsoft Windows. Please don’t openany issues related to that platform.
#Celery的架构由三部分组成,
消息中间件(message broker):需要使用第三方,reids,rabbitmq等 #提交任务的地方
任务执行单元(worker):celery提供的 #执行任务的地方
任务执行结果存储(task result store):使用第三方 redis等 #任务完成的结果的地方
pip install celery
# 使用场景
异步执行:解决耗时任务,将耗时操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音视频处理等等
延迟执行:解决延迟任务
定时执行:解决周期(周期)任务,比如每天数据统计
#cerely主要是提高并发量
3 celery快速使用
####### 第一步:写一个py文件,实例化得到app,编写任务from celery import Celery
broker='redis://127.0.0.1:6379/1'#消息中间件
backend='redis://127.0.0.1:6379/2'#结果存储
app = Celery(__name__,backend=backend,broker=broker) #__name__等于app对象的名字#写任务 也可以说叫函数,使用装饰器装饰一下@app.taskdefadd(a,b):
import time
time.sleep(2)
return a+b
######## 第二步:在其他系统中,提交任务,(导入任务)from main import add
#同步调用,不叫提交任务# res=add(3,4)# print(res)#异步执行,先提交任务,并不执行
res=add.apply_async(args=[3,4])
#返回结果是任务的id号61bdfa12-95b1-46e4-b020-40db8113bc47print(res)
#### 第三步:启动worker执行任务# 使用命令启动worker# win机器,需要安装 eventlet# pip install eventlet# 启动命令 -A启动那个文件 -l日志界别 -P win下才加# 3.x 及以前:celery worker -A main -l info -P eventlet# 4.x及以后:celery -A main worker -l info -P eventlet# linux执行下面:区别在于linux不用加-P参数
celery -A main worker -l info
### 第四步:worker就会从任务中取出任务执行### 第五步:查看任务执行结果#查询结果 根据id查询 还有app名字from main import app
from celery.result import AsyncResult
id = '61bdfa12-95b1-46e4-b020-40db8113bc47'if __name__ == '__main__':
asy = AsyncResult(id=id, app=app)
if asy.successful(): # 顺利执行完了,可以取结果了
res = asy.get() # 获取任务执行的结果print(res)
elif asy.failed():
print('任务失败')
elif asy.status == 'PENDING':
print('任务等待中被执行')
elif asy.status == 'RETRY':
print('任务异常后正在重试')
elif asy.status == 'STARTED':
print('任务已经开始被执行')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!