13.2 Celery

除了通用的消息队列外,任务队列在分布式处理中也十分重要。任务队列的输入是工作的一个单元,称为任务,有多个工作者监听队列来获取任务并执行。

13.2 Celery - 图1

Celery是一个简单、灵活、高可用、高性能的开源(BSD许可)分布式任务处理系统,专注于实时处理的任务队列管理,同时也支持任务调度。Celery基于Python实现,跟包括Django、Pyramid、Pylons、Flask、Tornado等Web框架都无缝集成,有庞大的用户与贡献者社区。Celery可以单机运行,也可以在多台机器上运行,甚至可以跨越数据中心运行。

1.使用官方镜像

启动一个celery worker,即RabbitMQ Broker:


  1. $ docker run --link some-rabbit:rabbit --name some-celery -d celery:latest

检查集群状态:


  1. $ docker run --link some-rabbit:rabbit --rm celery celery status

启动一个celery worker,即Redis Broker:


  1. $ docker run --link some-redis:redis -e CELERY_BROKER_URL=redis://redis --name
  2. some-celery -d celery

检查集群状态:


  1. $ docker run --link some-redis:redis -e CELERY_BROKER_URL=redis://redis --rm
  2. celery celery status

2.使用Celery库

如果用户使用的框架已有Celery库,那么使用起来会更方便。

下面是Python中调用Celery的hello world程序:


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