博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
celery 使用
阅读量:6006 次
发布时间:2019-06-20

本文共 1916 字,大约阅读时间需要 6 分钟。

celery是一个简单的、灵活的、可靠的分布式系统,提供了工具来维护这样一个系统,用于处理大量的信息(实时信息、定时任务安排),是一个任务队列,易于使用,易于和其他语言进行配合。

任务队列

任务队列是一种把任务通过线程或机器进行分发的机制,输入是一个工作单元--任务,工作进程则不断地检查任务队列来执行新任务。celery使用消息来通信,流程为:客户端添加消息到队列来初始化一个任务,然后消息队列系统把消息分发给工作进程。celery可以包含多个工作进程和消息系统,来保证高可用性和进行水平扩展。

特性

简单,不需要配置文件,高可靠性(工作进程和客户端在连接丢失或失败时会自动重试,一些支持HA的消息系统可以做主主、主从扩展),快速(每分钟处理几百万任务,通过使用RabbitMQ librabbitmq 和 一些优化设置),它的每一部分都可以灵活地扩展(自定义的pool,序列化方式,压缩,日志,周期任务,消费者,生产者),支持的消息队列系统(redis rabbitmq),支持的结果存储(django sqlalchemy redis amqp),并发支持(多进程,eventlet gevent,单线程),序列化方式(json pickle yaml msgpack)。

自带的监控功能,工作流,资源泄露预防,处理速率、运行时间控制

消息队列

rabbitmq 功能完整、稳定、耐用、易安装,作为生产环境很合适。

redis 也是功能完整的,但是丢失数据的可能性较高,如被停止或停电。

应用

需要一个celery实例,即应用。这个应用是使用所有东西的进入点,例如创建任务、管理工作进程,必须可被其他模块引入。

tasks.py

# coding: utf8from celery import Celeryapp = Celery('tasks', broker='pyamqp://guest@localhost//')# 传入的tasks参数即当前的模块名称,broker即为消息队列的地址# ampb(RabbitMQ) redis# 下面创建任务@app.taskdef add(x, y):    return x + y

执行程序,启动服务器:

celery -A tasks worker --loglevel=info

调用

from tasks import addadd.delay(4, 4)

现在task是被之前启动的工作进程来执行,返回值是一个AsyncResult,可以用来判断任务的状态、等待该任务执行完毕或是获得它的返回值。默认是不返回的,需要配置result backend,也可以在工作进程的命令行输出窗口中看到。

保存结果

可以使用很多backend 例如Django的ORM、SQLAlchemy,Redis,RabbitMQ。

app = Celery('tasks', backend='rpc://', broker='pyamqp://')# 这边使用的backend是RabbitMQ的rpc远程调用result = add.delay(4, 4)  # 现在就可以获得返回的result了result.ready()  # 判断任务是否执行完成result.get(timeout=1)  # 等待任务执行(一般不用)# 如果任务出错了这边也会直接获得异常 或:result.get(propagate=False)  # 不抛出result.traceback  # 再获得异常信息

配置

app.conf.task_serializer = 'json'# 设置task的序列化方式# 一次设置很多选项app.conf.update(    task_serializer='json',    accept_content=['json'],    result_serializer='json',)

使用配置模块:

app.config_from_object('celeryconfig')

celeryconfig.py

broke_url = 'pyamqp://'task_serializer = 'json'task_serializer = 'json'result_serializer = 'json'accept_content = ['json']timezone = 'Europe/Oslo'enable_utc = True

如果想测试配置文件是否有语法问题,和普通的py文件一样,使用:

python -m celeryconfig

转载地址:http://zppmx.baihongyu.com/

你可能感兴趣的文章
angular ngClick 阻止冒泡和默认行为
查看>>
云场景实践研究第46期:吉利汽车
查看>>
烂泥:Linux源码包制作RPM包之Apache
查看>>
ASP.NET MVC3 验证
查看>>
测试工程师与开发工程师的搏奕
查看>>
Tomcat-5.5.20下配置MySQL-5.0.27的数据库连接池(一)
查看>>
服务器托管注意事项
查看>>
看奥运赛事得到的几点启示
查看>>
030 漂亮的页面标题
查看>>
PCI ROOT HID fail=0x5 ACPI Linux错误一般解决之道
查看>>
Android应用程序键盘(Keyboard)消息处理机制分析(2)
查看>>
Hadoop1.2完全分布式安装与配置
查看>>
Symfony2CookBook:如何使用虚拟的表单域选项
查看>>
select 忽略查询字段值大小写【小技巧】
查看>>
java:eclipse小图标含义
查看>>
FireFox插件
查看>>
[FtpSearchV2][构架设计][第一篇] 系统需求和概要设计
查看>>
Win8:To Do List Demo
查看>>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 5 ----asp.net MVC+Extjs
查看>>
VS技巧 使用Visual Studio Icon Patcher将2010的图片注入到2012中
查看>>