python测试开发

Celery架构原理和使用方法

2018-10-22  本文已影响0人  抚剑听琴

1. Celery 简介

Celery是一个自带电池的基于Python开发的分布式异步消息任务队列,它非常易于使用。通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用Celery。它主要适用于两大类场景:

Celery具有以下优点:

这有一个最简单的应用示例,你可以参照:

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

2. Celery基本工作流程

Celery基本工作流程

3. Celery安装

你可以安装Celery通过Python包管理平台(PyPI)或者源码安装
使用pip安装:

$ pip install -U Celery

你也可以使用pip命令安装与Celery捆绑、依赖的组件:

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

4. Celery使用

4.1 Brokers

Celery支持多种消息中间件作为Broker,即中间人。来在应用程序和Worker之间传递消息。

支持的消息中间件总览:

消息中间件 支持适配状态 支持监控 支持远程控制
RabbitMQ 稳定
Redis 稳定
Amazon SQS 稳定
Zookeeper 实验

RabbitMQ是默认的Broker它不需要其他额外的依赖和初始化配置。可参考我之前写的文章【RabbitMQ的Python客户端pika使用调研】和官方教程【Using RabbitMQ】,至于其他的消息中间件作为broker这里就不一一展开介绍了。

4.2 Worker

4.3 触发器

4.3.1 定时触发器

4.3.2 调用触发器

4.3 管理获取任务状态

http://docs.celeryproject.org/en/latest/userguide/tasks.html#states

4.4 backend

http://docs.celeryproject.org/en/latest/userguide/tasks.html#task-result-backends

4.5 与Flask框架集成

http://www.pythondoc.com/flask-celery/first.html#id1

4.6 与Django框架集成

踩过的一些坑

任务重复执行

使用 Celery Once 来防止 Celery 重复执行同一个任务

celery 在执行task时有个机制,就是任务时长超过了 visibility_timeout 时还没执行完,就会指定其他worker重新开始task,默认的时长是一小时.

上一篇下一篇

猜你喜欢

热点阅读