什么是Clelery

  Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统。专注于实时处理的异步任务队列。同时也支持任务调度。

Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。

** 消息中间件 **

Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等

** 任务执行单元 **

Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。

** 任务结果存储 **

Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等

使用场景

异步任务:将耗时操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音视频处理等等

定时任务:定时执行某件事情,比如每天数据统计

Celery的安装配置

pip install celery

消息中间件:RabbitMQ/Redis

app=Celery('任务名',backend='xxx',broker='xxx')

实例分析

基本使用

创建项目celerytest

创建py文件:celery_app_task.py

import celery
import time
# broker='redis://127.0.0.1:6379/2' 不加密码
backend='redis://:123456@127.0.0.1:6379/1'
broker='redis://:123456@127.0.0.1:6379/2'
cel=celery.Celery('test',backend=backend,broker=broker)
@cel.task
def add(x,y):
return x+y

创建py文件:add_task.py,添加任务

from celery_app_task import add
result = add.delay(4,5)
print(result.id)

创建py文件:run.py,执行任务,或者使用命令执行:celery worker -A celery_app_task -l info

run.py

from celery_app_task import cel
if __name__ == '__main__':
cel.worker_main()
# cel.worker_main(argv=['--loglevel=info')

创建py文件:result.py,查看任务执行结果

from celery.result import AsyncResult
from celery_app_task import cel async = AsyncResult(id="e919d97d-2938-4d0f-9265-fd8237dc2aa3", app=cel) if async.successful():
result = async.get()
print(result)
# result.forget() # 将结果删除
elif async.failed():
print('执行失败')
elif async.status == 'PENDING':
print('任务等待中被执行')
elif async.status == 'RETRY':
print('任务异常后正在重试')
elif async.status == 'STARTED':
print('任务已经开始被执行')
```执行 add_task.py,添加任务,并获取任务ID 执行 run.py ,或者执行命令:celery worker -A celery_app_task -l info 执行 result.py,检查任务状态并获取结果 更进一步的请参考下面参考文档 #### 参考文档 * [参考文档](https://www.jb51.net/article/158326.htm)
* [知乎经典](https://www.jianshu.com/p/620052aadbff)

最新文章

  1. spark
  2. 微软职位内部推荐-Software Development Engineering II
  3. 【JNI】锅炉压力监测器
  4. JS调用Delphi编写的OCX控件
  5. web 页面传值方法
  6. java中ExecutorService接口
  7. java基础知识2
  8. Play学习 - 体验网页模板
  9. HandlerThread实现数字时钟
  10. 操作系统服务:OS模块
  11. Dynamics CRM2016 新功能之从CRM APP通过电子邮件发送页面链接
  12. IDEA安装插件提示was not installed: Cannot download解决办法
  13. CentOS6.5系统,mysql数据库的安装
  14. Symbol Vs String
  15. 00-自测4. Have Fun with Numbers
  16. Java - "JUC线程池" 线程状态与拒绝策略源码分析
  17. innerHTML在ie9有部分无法添加
  18. JQUERY方法给TABLE动态增加行
  19. kbmMWtable for XE5 接近尾声
  20. 一招搞定多Offer选择

热门文章

  1. 《FA分享》---创业学习--训练营直播第二课--HHR
  2. Cisco Umbrella WLAN
  3. MySQL数据库--基础简述
  4. express session 实现登录
  5. 【Fine学习笔记】python 文件l操作方法整理
  6. 高级T-SQL进阶系列 (一)【中篇】:使用 CROSS JOIN 介绍高级T-SQL
  7. JShell的使用
  8. SQL SERVER用户表信息
  9. 浅谈CVE-2018-12613文件包含/buuojHCTF2018签到题Writeup
  10. leetCode练题——14. Longest Common Prefix