【Celery】【1】celery学习笔记-异步执行原理

1. 定义

celery 3部分组成:
消息中间件(broker)

  • 生产者消费者模型
  • django生产者执行业务,订单来了,数据放到消息队列(rq),消费者监听队列,回调函数完成发送短息

一分钟有100个请求,100个请求入消息队列,回调任务完成100次,大量IO操作,一个2s,完成后再取第二个,重复这个步骤会耽误大量IO时间,第200个人需要200s才能有短信通知。

  • rabbitmq+redis

执行任务单元(worker)

  • 任务执行的单元,worker并发的运行在分布式的系统结点中。

任务执行结果存储(task result store)

  • 存储worker的结果

2. 应用场景

异步任务:将耗时的操作任务提交给celery执行
定时任务:定时执行某件事情,每天统计数据

3. 异步任务实现

pip install eventlet
pip install redis
pip install celery

用celery实现以下流程:
方法.delay方法——就实现了生产者的全部工作
在这里插入图片描述

# 生产者
# 导入异步任务
from celery_task import send_msg,send_mail

result = send_mail.delay('gyz')
print(result.id)
result = send_mail.delay('xxz')
print(result.id)
# 消费者
import celery
import time

backend = 'redis://127.0.0.1:6379/3' # 结果储存
broker = 'redis://127.0.0.1:6379/4' # 中间件

cel = celery.Celery('test',backend=backend,broker=broker)


@cel.task() # celery的实例对象,套上celery装饰器就变成了celery异步任务
def send_mail(name):
    print("发送邮件to%s"%name)
    time.sleep(10)
    print("发送邮件to%s完成"%name)
    return "OK"


@cel.task() # celery的实例对象,套上celery装饰器就变成了celery异步任务
def send_msg(msg):
    print("发送信息to%s"%msg)
    time.sleep(5)
    print("发送信息to%s完成"%msg)
    return "OK"
celery -A celery_task worker -l info -P eventlet  -c 10

worker是进程、 -A是文件 、-l是日志
这条命令完成了:用celery连接消息中间件,创建队列、监听队列、启动多个worker

在这里插入图片描述8个并发、1个任务

3.1 取异步结果

在这里插入图片描述

from celery_task import cel
from celery.result import AsyncResult

async_result = AsyncResult(id = 'a6984cf0-f29d-4bf3-83ad-7289431e712e',app=cel)

if async_result.successful():
    result = async_result.get()
    print(result)

elif async_result.failed():
    print('fail')
elif async_result.status == 'PENDING':
    print('任务等待中被执行')
elif async_result.status == 'RETRY':
    print('异常后重试')
else:
    print('任务开始被执行')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值