-
简单
Celery 上手比较简单,不需要配置文件就可以直接运行。
-
高可用
如果出现丢失连接或连接失败,职程(Worker)和客户端会自动重试,并且中间人通过 主/主 主/从 的方式来进行提高可用性。
-
快速
单个 Celery 进行每分钟可以处理数以百万的任务,而且延迟仅为亚毫秒(使用 RabbitMQ、 librabbitmq 在优化过后)。
-
灵活
Celery 的每个部分几乎都可以自定义扩展和单独使用,例如自定义连接池、序列化方式、压缩方式、日志记录方式、任务调度、生产者、消费者、中间人(Broker)等。
它支持-
中间人
-
RabbitMQ
-
Redis
-
Amazon SQS
-
-
结果存储
-
AMQP、 Redis
-
Memcached
-
SQLAlchemy、Django ORM
-
Apache Cassandra, Elasticsearch, Riak
-
MongoDB, CouchDB, Couchbase, ArangoDB
-
Amazon DynamoDB, Amazon S3
-
Microsoft Azure Block Blob, Microsoft Azure Cosmos DB
-
File system
-
-
并发
-
prefork (multiprocessing)
-
Eventlet、gevent
-
thread (multithreaded)
-
solo (single threaded)
-
-
序列化
-
pickle、json、yaml、msgpack
-
zlib、bzip2 compression
-
Cryptographic message signing
-
-
监控
可以针对整个流程进行监控,内置的工具或可以实时说明当前集群的概况。
-
调度
可以通过调度功能在一段时间内指定任务的执行时间 datetime,也可以根据简单每隔一段时间进行执行重复的任务,支持分钟、小时、星期几,也支持某一天或某一年的Crontab表达式。
-
工作流
可以通过“canvas“进行组成工作流,其中包含分组、链接、分块等等。
简单和复杂的工作流程可以使用一组“canvas“组成,其中包含分组、链接、分块等。
-
资源(内存)泄漏保护
--max-tasks-per-child
参数适用于可能会出现资源泄漏(例如:内存泄漏)的任务。
-
时间和速率的限制
您可以控制每秒/分钟/小时执行任务的次数,或者任务执行的最长时间,也将这些设置为默认值,针对特定的任务或程序进行定制化配置。
-
自定义组件
开发者可以定制化每一个职程(Worker)以及额外的组件。职程(Worker)是用 “bootsteps” 构建的-一个依赖关系图,可以对职程(Worker)的内部进行细粒度控制。
框架集成
Celery可以快速的集成一些常用的Web框架,详细如下:
Web框架
集成包
Pyramid
pyramid_celery
Pylons
celery-pylons
Flask
不需要
web2py
web2py-celery
Tornado
tornado-celery
Tryton
celery_tryton
针对 Django ,请参考 Django 的初次使用。
集成包并不是必须安全的,但使用它们可以更加快速和方便的开发,有时它们会在 fork(2) 中添加例如数据库关闭连接的回调。
安装
您可以通过 python 的 pip 安装或通过源代码进行安装 Celery 。
使用pip进行安装
pip install -U Celery
捆绑
Celery 自定义了一组用于安装 Celery 和特定功能的依赖。
您可以在中括号加入您需要依赖,并可以通过逗号分割需要安装的多个依赖包。
pip install "celery[librabbitmq]"
pip install "celery[librabbitmq,redis,auth,msgpack]"
目前发行的依赖包如下:
序列化
-
celery[auth]:使用auth保证程序的安全
-
celery[msgpack]:使用msgpack序列化
-
celery[yaml]:使用yaml序列化
并发
-
celery[eventlet]:基于 eventle 的并发池
-
celery[gevent]:基于 gevent 的并发池
传输和后端
-
celery[librabbitmq]:使用librabbitmq库
-
celery[redis]:使用Redis进行消息传输或后端结果存储
-
celery[sqs]:使用Amazon SQS进行消息传输(实验阶段)
-
celery[tblib]:使用 task_remote_tracebacks 的功能
-
celery[memcache]:使用Memcached作为后端结果存储(使用的是pylibmc)
-
celery[pymemcache]:使用Memcached作为后端结果存储(纯Python实现)
-
celery[cassandra]:使用Apache Cassandra作为后端结果存储
-
celery[couchbase]:使用CouchBase作为后端结果存储
-
celery[arangodb]:使用ArangoDB作为后端结果存储
-
celery[elasticsearch]:使用ElasticSearch作为后端结果存储
-
celery[riak]:使用Riak作为后端结果存储
-
celery[dynamodb]:使用AWS DynamoDB作为后端结果存储
-
celery[zookeeper]:使用Zookeeper进行消息传输
-
celery[sqlalchemy]:使用SQLlchemy作为后端结果存储(支持)
-
celery[pyro]:使用Pyro4进行消息传输(实验阶段)
-
celery[slmq]:使用 SoftLayer Message Queue进行消息传输(实验阶段)
-
celery[consul]:使用Consul.io Key/Value进行存储传输消息或后端结果存储(实验阶段)
-
celery[django]:支持比较低的Django版本,不建议您在项目中使用它,它仅供参考
pip
使用 Celery 的开发版本需要开发版本的 kombu、amqp、billiard 和 vine。
您可以通过 pip 来进行安装:
pip install https://github.com/celery/celery/zipball/master#egg=celery
pip install https://github.com/celery/billiard/zipball/master#egg=billiard
pip install https://github.com/celery/py-amqp/zipball/master#egg=amqp
pip install https://github.com/celery/kombu/zipball/master#egg=kombu
pip install https://github.com/celery/vine/zipball/master#egg=vine