任务队列
任务队列是一种把任务通过线程或机器进行分发的机制,输入是一个工作单元--任务,工作进程则不断地检查任务队列来执行新任务。
celery使用消息来通信,通常需要中间件中转。流程为:客户端添加消息到队列来初始化一个任务,然后消息队列系统把消息分发给工作进程。
celery可以包含多个工作进程和消息队列系统,来保证高可用性和进行水平扩展。
虽然celery是python实现的,仍可轻松实现其他语言的客户端,如php js,或可可使用webhooks来交互。
需求
可在单台机器、多台机器、集群中运行
需要py2.7+ 不支持win
需要rabbitmq或redis作为消息中间件
特性
简单
不需要配置文件
高可靠性
工作进程和客户端在连接丢失或失败时会自动重试,一些支持HA的消息系统可以做主主、主从扩展
快速
每分钟处理几百万任务,通过使用RabbitMQ librabbitmq 和 一些优化设置,可使得rtt为亚毫秒级
扩展
它的每一部分都可以灵活地扩展(自定义的pool,序列化方式,压缩,日志,定时任务,消费者,生产者,中间件)
支持的中间件
redis rabbitmq
结果存储
redis amqp memcached orm apache-Cassandra ES
并发方式
fork eventlet gevent 单线程
序列化方式
pickle json yaml 另支持压缩 签名 加密
监控
定时任务
work flow
资源泄露保护
执行时间限制
自定义
安装
使用redis
pip install celery[redis,auth,gevent]
使用rabbitmq
pip install celery[librabbitmq,auth,gevent]
网友评论