celery入门

一、介绍

celery–异步调度
celery–功能完备即插即用的任务队列
celery适用于异步处理问题,比如发送邮件、文件上传、图像处理等比较耗时的操作。

二、特点

简单–易于使用和维护,有丰富的文档
高效–单个celery进程每分钟可以处理数百万哥任务
灵活–celery中几乎每个部分都可以自定义扩展

三、安装

pip install celery

四、组成

Celery通过消息进行通信,通常使用一个叫broker(中间人)来协client(任务的发出者)和worker(任务的处理者)
client发出消息到队列中,broker将队列中的信息派发给worker来处理
一个Celery系统可以包含很多的worker和broker,可增强横向扩展性和高可用性能
Celery组成结构是生产者消费者模型的一种体现

五、使用

1.首先创建一个celery实例
创建文件tasks.py
在这里插入图片描述
这里celery的第一个参数是当前文件(模块)的名字,这是必须的,以便当任务被定义在_main_模块时名字可以被自动生成
第二个参数是中间人键值参数,指定你想要使用的消息中间人URL.这里我们使用RabbitMQ (这也是默认选项)。你也可以选择其它中间人。对于RabbitMQ你可以用amqp://localhost,对于Redis 可以用redis://localhost。
这里定义了一个任务名叫add,返回两个值的和

2.运行celery worker服务
celery -A tasks worker --loglevel=info

3.调用任务
调用任务可以用delay()方法
这是apply_async()方法的方便的快捷方式,apply_async()拥有任务执行的更多的控制
在这里插入图片描述
这里相当于直接把参数传给上面咱们创建的函数,也就是celery的worker

4.保存结果
如果你想保存任务状态, Celery 需要把状态存储或发送到某个地方。有几个内建结果后端可供选择: SQLAlchemy/Django ORM, Memcached, Redis, RPC(RabbitMQ/AMQP)
这个例子我们使用 redis 结果后端, 它把状态作为临时消息发送回来。后端通过 backend 参数 指定给Celery
在这里插入图片描述
现在结果后端配置好了,再次调用

result = add.delay(4, 4)

无论任务是否接受处理,ready()方法都会有返回

----> result.ready()
----> False

你可以等待结果的完成, 但这很少使用,因为它把异步调用变成了同步:

----> result.get(timeout=1)
----> 8

为了应对任务可能抛异常,get()将会再次抛异常,但你可以通过指定propagate参数来覆盖

----> result.get(propagate=False)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值