一、介绍

celery是一个基于python开发的分布式异步消息任务队列,用于处理大量消息,同时为操作提供维护此类系统所需的工具。
它是一个任务队列,专注于实时处理,同时还支持任务调度。如果你的业务场景中需要用到异步任务,就可以考虑使用celery

二、实例场景

1、你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情。
2、你想做一个定时任务,比如每天检测一下你们所有客户的资料,如果发现今天 是客户的生日,就给他发个短信祝福

三、优点

  • 1、简单:一但熟悉了celery的工作流程后,配置和使用还是比较简单的
  • 2、高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务
  • 3、快速:一个单进程的celery每分钟可处理上百万个任务
  • 4、灵活:几乎celery的各个组件都可以被扩展及自定制

四、入门

celery 需要一个解决方案来发送和接受消息,通常,这是以称为消息代理的单独服务的形式出现的
有以下几种解决方案,包括:
一:RabbitMQ(消息队列,一种程序之间的通信方式)
rabbitmq 功能齐全,稳定,耐用且易于安装。它是生产环境的绝佳选择。
如果您正在使用Ubuntu或Debian,请执行以下命令安装RabbitMQ:

$ sudo apt-get install rabbitmq-server

命令完成后,代理已经在后台运行,准备为您移动消息:。Starting rabbitmq-server: SUCCESS
二、redis

redis功能齐全,但在突然中止或者电源故障时更容易丢失数据

五、安装

$ pip install celery 

六、应用

创建一个tasks.py文件

from celery import Celery

app = Celery('tasks', broker='pyamqp://guest@localhost//')
@app.task
def add(x, y):
    return x + y

第一个参数Celery是当前模块的名称。只有在__main__模块中定义任务时才能自动生成名称。
第二个参数是broker关键字参数,指定要使用的消息代理的URL。这里使用RabbitMQ(也是默认选项)。
您可以使用RabbitMQ amqp://localhost,或者您可以使用Redis redis://localhost。
您定义了一个名为add的任务,返回两个数字的总和。

 1 from __future__ import absolute_import
 2             import os
 3             from celery import Celery
 4             from django.conf import settings
 5             # set the default Django settings module for the 'celery' program.
 6             os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'saruman_server.settings')
 7             app = Celery('saruman_server')
 8 
 9             # Using a string here means the worker will not have to
10             # pickle the object when using Windows.
11             app.config_from_object('django.conf:settings')
12             app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
13 
14             @app.task(bind=True)
15             def debug_task(self):
16                 print('Request: {0!r}'.format(self.request))
和django配合实例

相关文章: