Celery基本应用

Celery是专注实时处理和任务调度的分布式任务队列;是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个实例场景中可用的例子:

主要应用场景:

1,web应用,当需要触发事件需要较长时间处理完成,可以交给celery进行异步执行,执行完后返回结果,这段时间不用等待,提高系统的吞吐量和响应时间。例如:你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行过程中,你可以继续做其它的事情。 

2,完成任务时,需要额外的事件处理,比如发送短信/邮件、推送消息、清理/设置缓存等。

3,后台定时任务处理,celery可以帮助我们在不同服务器进行定时任务管理。例如:你想做一个定时任务,比如每天检测一下你们所有客户的资料,如果发现今天 是客户的生日,就给他发个短信祝福。

主要特性:

1,   方便查询任务的进展情况,如执行结果,状态,消耗时间。

2,可以利用功能齐全的后台管理进行任务的添加,删减等操作。

3,可以进行并发操作。提供异常处理机制。

4、高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务。

5、快速:一个单进程的celery每分钟可处理上百万个任务。

主要架构:

1,Celery Beat:任务调度器,Beat进程会读取配置文件的内容,周期性地将配置中到期需要执行的任务发送给任务队列。

2,Celery Worker: 任务执行的消费者。执行任务。执行任务的消费者,通常会在多台服务器运行多个消费者来提高执行效率。

3,Broker:消息的中间件,接收生成者产生的消息,存储队列并分发给任务方进行消费。

4,Producer:调用celery的API,函数,装饰器等产生任务交给任务队列,简称生成者。

5,Result Backend:任务处理完成后的结果储存。以供查询
 

选择消息代理:

Celery目前支持RabbitMQ、Redis、MongoDB、Beanstalk、SQLAlchemy、Zookeeper等作为消息代理,但适用于生产环境的只有RabbitMQ和Redis,至于其他的方式,一是支持有限,二是可能得不到更好的技术支持。 

Celery官方推荐的是RabbitMQ,Celery的作者Ask Solem Hoel最初在VMware就是为RabbitMQ工作的,Celery最初的设计就是基于RabbitMQ,所以使用RabbitMQ会非常稳定,成功案例很多。如果使用Redis,则需要能接受发生突然断电之类的问题造成Redis突然终止后的数据丢失等后果。

开始简单使用Celery

创建一个任务文件就叫admin.py

from celery import Celery

app = Celery('admin', broker='redis://localhost:6379/0', backend='redis://localhost:6379/1')

@app.task
def add(x, y):
    print("running...", x, y)
    return x + y
启动Celery Worker来开始监听并执行任务,在当前路径终端下输入命令
celery -A admin worker --loglevel=info

再打开一个终端, 进行命令行模式,在当前路径下进入python虚拟环境后调用任务,出现如下错误。看别人描述大概就是说win10上运行celery4.x就会出现这个问题,解决办法如下,原理未知。解决办法:安装。pip install eventlet     然后celery -A admin worker -l info -P eventlet

运行成功:终端和redis数据库都可以看到结果

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值