celery java_celery使用总结

Celery 是一个分布式队列的管理工具,它封装了操作常见任务队列的各种操作,可以用 Celery 提供的接口快速实现并管理一个分布式的任务队列 , 我们使用它可以快速进行任务队列的使用与管理,同时也支持任务调度。

使用原因

程序运行过程中,要执行耗时的任务,但又不想主程序被阻塞,常见的方法是多线程。可是当并发量过大时,多线程压力很大,必须要用线程池来限制并发个数,而且多线程对共享资源的使用也是很麻烦的事情。当然也可以使用协程,但是协程毕竟还是在同一线程内执行的,如果一个任务本身就要执行很长时间,而不是因为等待IO被挂起,那其他协程照样无法得到运行。

常见使用场景

开发中经常碰到需要使用异步任务的场景,比如一个WEB请求中有运行时间很长的业务运算,如果不采用异步任务,会阻塞当前的web请求,影响用户体验。我们有多种不同的任务,这些任务优先级不同,比如我们有视频上传和压缩任务等,照片压缩上传等任务还有其他不重要的任务。这些任务耗时需要使用不同的worker去处理。,等到Celery执行完成以后通知用户。在运维场景下需要批量在几百台机器执行某些命令或者任务,此时Celery可以轻松搞定。

Celery的架构组成

一个完整的Celery分布式队列架构应该包含一下几个模块:

Celery由以下三部分构成:任务发布者,任务调度器,消息中间件(Broker)、任务执行单元(Worker)、任务结果存储(Backend),如图:

打开今日头条,查看更多图片

producer: 任务发布者, 通过调用API向celery发布任务的程序。

celery beat:任务调度器。beat进程会读取配置文件里的内容。(celerybeat_schedule里设置),周期性的将配置中到期需要执行的任务发送到任务队列。 根据配置文件发布定时任务。

Broker,即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列。接受任务消息,存入队列再按顺序分发给worker执行。Celery 本身不提供队列服务,官方推荐使用 RabbitMQ 和 Redis 等。

Worker 是执行任务的处理单元,实际执行任务的程序,它实时监控消息队列,获取队列中调度的任务,并执行它。

Backend 用来存储Worker执行的任务的结果,Celery存储默认支持包括AMQP, Redis,memcached, MongoDB,Django ORM,SQLAlchemy,等。

安装Celery

可以通过Python包索引(PyPI)或从源安装Celery

要使用pip安装:pip install Celery

要使用easy_install进行安装:easy_install Celery

Celery配置

常见的配置有三种方式,以redis为例BROKER_URL = 'redis://ip(地址):6379/0'。celery broker 的地址和选择的 redis db,默认是 0。

第一种:

第二种:

第三种:

config中指定broker_ur和result_backendapp = Celery('tasks')

app.config_from_object('config')

添加异步任务(task)

使用@app.task() 添加task

测试代码:@app.task()

def add_test(x, y):

return x + y

Celery 启动

测试代码:

if __name__ == "__main__":app.start()

或在shell中执行:celery worker -A task -l info

参数:-A 选项指定 celery 实例 app 的位置, 可以直接指定:celery worker -A task.app -l info

-l 选项指定日志级别, -l 是 --loglevel 的缩略形式。

Celery监控

celery flower是python的用于监控celery的模块。比如可以在web页面实时显示celery worker的状态、任务的状态等,flower还提供了REST API用于方便第三方应用直接触发任务执行、获取任务执行结果等,这也极大地扩展了celery的应用范围,比如一个Java应用也可以通过flower的REST接口使用celery的异步任务系统。

Celery集成flask

创建celery的实例对象的名字必须是flask应用程序app的名字,否则celery启动会失败。

安装Flask-Celery-Helperpip install Flask-Celery-Helper

测试例子:

Celery集成djongo

安装依赖库pip install django

pip install django-celery

pip install celery-with-redis

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值