Celery 简介 — Python 文档

来自菜鸟教程
Celery/docs/latest/getting-started/introduction
跳转至:导航、​搜索

芹菜简介

什么是任务队列?

任务队列用作跨线程或机器分配工作的机制。

任务队列的输入是一个称为任务的工作单元。 专用工作进程不断监视任务队列以执行新工作。

Celery 通过消息进行通信,通常使用代理在客户端和工人之间进行调解。 为了启动一个任务,客户端将一条消息添加到队列中,然后代理将该消息传递给工作人员。

Celery 系统可以由多个 worker 和 broker 组成,让位于高可用性和水平扩展。

Celery 是用 Python 编写的,但该协议可以用任何语言实现。 除了 Python 之外,还有用于 Node.js 的 node-celerynode-celery-ts,以及一个 PHP 客户端

还可以通过公开 HTTP 端点并具有请求它的任务(webhooks)来实现语言互操作性。


我需要什么?

版本要求

Celery 5.1 版运行于

  • 蟒蛇❨3.6、3.7、3.8❩
  • PyPy3.6 ❨7.3❩

Celery 4.x 是最后一个支持 Python 2.7 的版本,Celery 5.x 需要 Python 3.6 或更新版本。 Celery 5.1.x 还需要 Python 3.6 或更新版本。

如果您运行的是旧版本的 Python,则需要运行旧版本的 Celery:

  • Python 2.7 或 Python 3.5:Celery 系列 4.4 或更早版本。
  • Python 2.6:Celery 系列 3.1 或更早版本。
  • Python 2.5:Celery 系列 3.0 或更早版本。
  • Python 2.4 是 Celery 系列 2.2 或更早版本。

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

Celery 需要消息传输来发送和接收消息。 RabbitMQ 和 Redis 代理传输功能齐全,但也支持无数其他实验性解决方案,包括使用 SQLite 进行本地开发。

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


开始

如果这是您第一次尝试使用 Celery,或者如果您没有跟上 3.1 版本的开发,并且来自以前的版本,那么您应该阅读我们的入门教程:


芹菜是…

  • 简单的

    Celery 易于使用和维护,它不需要配置文件

    它有一个活跃、友好的社区,您可以与之交谈以获得支持,包括 邮件列表IRC 频道

    这是您可以制作的最简单的应用程序之一:

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

    Worker 和客户端会在连接丢失或失败的情况下自动重试,一些 Broker 以 Primary/PrimaryPrimary/Replica 复制的方式支持 HA。

  • 快速地

    单个 Celery 进程每分钟可以处理数百万个任务,具有亚毫秒级的往返延迟(使用 RabbitMQ、librabbitmq 和优化设置)。

  • 灵活的

    Celery 的几乎每个部分都可以扩展或单独使用,自定义池实现、序列化程序、压缩方案、日志记录、调度程序、消费者、生产者、代理传输等等。


它支持

  • 结果存储

    • AMQP、Redis

    • 内存缓存,

    • SQLAlchemy,Django ORM

    • Apache Cassandra、Elasticsearch、Riak

    • MongoDB、CouchDB、Couchbase、ArangoDB

    • 亚马逊 DynamoDB、亚马逊 S3

    • Microsoft Azure Block Blob、Microsoft Azure Cosmos DB

    • 文件系统


  • 序列化

    • picklejsonyamlmsgpack

    • zlibbzip2 压缩。

    • 加密消息签名。



特点

  • 监控

    监控事件流由工作人员发出,并由内置和外部工具用于实时告诉您集群正在做什么。

    阅读更多…

  • 工作流程

    简单和复杂的工作流可以使用一组我们称为“画布”的强大原语组成,包括分组、链接、分块等。

    阅读更多…

  • 时间和速率限制

    您可以控制每秒/分钟/小时可以执行多少个任务,或者允许一个任务运行多长时间,并且可以将其设置为默认值,针对特定工作人员或针对每种任务类型单独设置。

    阅读更多…

  • 调度

    您可以以秒或 datetime 为单位指定运行任务的时间,或者您可以使用周期性任务基于简单的间隔或支持分钟、小时、星期几、月份中的天的 Crontab 表达式来重复发生的事件,以及一年中的月份。

    阅读更多…

  • 资源泄漏保护

    --max-tasks-per-child 选项用于泄漏资源(如内存或文件描述符)的用户任务,这些资源完全不受您的控制。

    阅读更多…

  • 用户组件

    每个工作组件都可以定制,附加组件可以由用户定义。 worker 是使用“bootsteps”构建的——一个依赖图,可以对 worker 的内部进行细粒度控制。


框架集成

Celery 很容易与 web 框架集成,其中一些甚至有集成包:

对于 Django,请参阅 Django 的第一步

集成包并不是绝对必要的,但它们可以使开发更容易,有时它们会添加重要的钩子,比如在 fork(2) 关闭数据库连接。


安装

您可以通过 Python Package Index (PyPI) 或从源代码安装 Celery。

使用 pip 安装:

$ pip install -U Celery

捆绑

Celery 还定义了一组包,可用于安装 Celery 和给定功能的依赖项。

您可以在您的要求中或使用括号在 pip 命令行上指定这些。 可以通过用逗号分隔来指定多个包。

$ pip install "celery[librabbitmq]"

$ pip install "celery[librabbitmq,redis,auth,msgpack]"

以下捆绑包可用:

序列化器

celery[auth]
用于使用 auth 安全序列化程序。
celery[msgpack]
用于使用 msgpack 序列化程序。
celery[yaml]
用于使用 yaml 序列化程序。


并发

celery[eventlet]
用于使用 :pypi:`eventlet` 池。
celery[gevent]
用于使用 :pypi:`gevent` 池。


传输和后端

celery[librabbitmq]

用于使用 librabbitmq C 库。

celery[redis]

使用 Redis 作为消息传输或结果后端。

celery[sqs]

使用 Amazon SQS 作为消息传输( 实验 )。

celery[tblib]

用于使用 :setting:`task_remote_tracebacks` 功能。

celery[memcache]

使用 Memcached 作为结果后端(使用 :pypi:`pylibmc`

celery[pymemcache]

使用 Memcached 作为结果后端(纯 Python 实现)。

celery[cassandra]

使用 Apache Cassandra 作为 DataStax 驱动程序的后端。

celery[couchbase]

使用 Couchbase 作为结果后端。

celery[arangodb]

使用 ArangoDB 作为结果后端。

celery[elasticsearch]

使用 Elasticsearch 作为结果后端。

celery[riak]

使用 Riak 作为结果后端。

celery[dynamodb]

使用 AWS DynamoDB 作为结果后端。

celery[zookeeper]

使用 Zookeeper 作为消息传输。

celery[sqlalchemy]

使用 SQLAlchemy 作为结果后端 (supported)。

celery[pyro]

用于使用 Pyro4 消息传输( 实验性 )。

celery[slmq]

用于使用 SoftLayer 消息队列传输( 实验性 )。

celery[consul]

使用 Consul.io 键/值存储作为消息传输或结果后端( 实验 )。

celery[django]

指定 Django 支持可能的最低版本。

您可能不应该在您的要求中使用它,它仅用于提供信息。


从源下载和安装

从 PyPI 下载最新版本的 Celery:

https://pypi.org/project/celery/

您可以通过执行以下操作来安装它:

$ tar xvfz celery-0.0.0.tar.gz
$ cd celery-0.0.0
$ python setup.py build
# python setup.py install

如果您当前未使用 virtualenv,则必须以特权用户身份执行最后一条命令。


使用开发版

带点

Celery 开发版还需要开发版 :pypi:`kombu`, :pypi:`amqp`, :pypi:`billiard`, 和:pypi:`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

用 git

请参阅 贡献 部分。