View Categories

2.Celery 入门

1 min read

Celery 需要消息中间件来进行发送和接收消息。 RabbitMQ 和 Redis 中间人的功能比较齐全,但也支持其它的实验性的解决方案,其中包括 SQLite 进行本地开发。

Celery 可以在一台机器上运行,也可以在多台机器上运行,甚至可以跨数据中心运行。

1.版本要求 #

Celery 4.0 运行:

  • Python ❨2.7,3.4,3.5❩
  • PyPy ❨5.4,5.5❩

这是支持 Python2.7 的最后一个版本,从下一个版本Celery5.x开始,需要Python3.5或更高的版本。

如果您的 Python 运行环境比较老,则需要使用旧版本的Celery:

  • Python 2.6:Celery 3.1 或更早版本。
  • Python 2.5:Celery 3.0 或更早版本。
  • Python 2.4:Celery 2.2 或更早版本。

Celery 是一个资金最少的项目,因此我们不支持 Microsoft Windows。请不要提出与该平台相关的任何问题。

2.开始 #

Celery 具有以下特点:

  • 简单

Celery 上手比较简单,不需要配置文件就可以直接运行。

它拥有一个庞大的社区,您可以在社区中进行交流问题,也可以通过 IRC 频道或邮件列表进行交流。

这是一个简单的 Demo:

from celery import Celery
app = Celery('hello', broker='amqp://guest@localhost//')
@app.task
def hello():
  return 'hello world'
  • 高可用

如果出现丢失连接或连接失败,职程(Worker)和客户端会自动重试,并且中间人通过 主/主 主/从 的方式来进行提高可用性。

  • 快速

单个 Celery 进行每分钟可以处理数以百万的任务,而且延迟仅为亚毫秒(使用 RabbitMQ、 librabbitmq 在优化过后)。

  • 灵活

Celery 的每个部分几乎都可以自定义扩展和单独使用,例如自定义连接池、序列化方式、压缩方式、日志记录方式、任务调度、生产者、消费者、中间人(Broker)等。

3.支持 #

  • 中间人
  • 结果存储
    • AMQP、 Redis
    • Memcached
    • SQLAlchemy、Django ORM
    • Apache Cassandra、Elasticsearch
  • 并发
  • 序列化
    • pickle、json、yaml、msgpack
    • zlib、bzip2 compression
    • Cryptographic message signing

4.功能 #

  • 监控

可以针对整个流程进行监控,内置的工具或可以实时说明当前集群的概况。更多……

  • 调度

可以通过调度功能在一段时间内指定任务的执行时间 datetime,也可以根据简单每隔一段时间进行执行重复的任务,支持分钟、小时、星期几,也支持某一天或某一年的Crontab表达式。更多……

  • 工作流

可以通过“canvas“进行组成工作流,其中包含分组、链接、分块等等。

简单和复杂的工作流程可以使用一组“canvas“组成,其中包含分组、链接、分块等。更多……

  • 资源(内存)泄漏保护

–max-tasks-per-child 参数适用于可能会出现资源泄漏(例如:内存泄漏)的任务。更多……

  • 时间和速率的限制

您可以控制每秒/分钟/小时执行任务的次数,或者任务执行的最长时间,也将这些设置为默认值,针对特定的任务或程序进行定制化配置。更多……

  • 自定义组件

开发者可以定制化每一个职程(Worker)以及额外的组件。职程(Worker)是用 “bootsteps” 构建的-一个依赖关系图,可以对职程(Worker)的内部进行细粒度控制。

5.框架集成 #

Celery可以快速的集成一些常用的Web框架,详细如下:

Web框架集成包
Pyramidpyramid_celery
Pylonscelery-pylons
Flask不需要
web2pyweb2py-celery
Tornadotornado-celery
Trytoncelery_tryton

针对 Django ,请参考 Django 的初次使用。

集成包并不是必须安全的,但使用它们可以更加快速和方便的开发,有时它们会在 fork(2) 中添加例如数据库关闭连接的回调。

Powered by BetterDocs

评论(0)

提示:请文明发言

您的邮箱地址不会被公开。 必填项已用 * 标注