celery调度学习

一、文档网站  

  Django中使用celery:https://www.cnblogs.com/wdliu/p/9530219.html

Celery 官网:http://www.celeryproject.org/

Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index.html

Celery 官方文档中文版:http://docs.jinkan.org/docs/celery/

celery配置:http://docs.jinkan.org/docs/celery/configuration.html#configuration

参考:http://www.cnblogs.com/landpack/p/5564768.html    http://blog.csdn.net/happyAnger6/article/details/51408266

http://www.cnblogs.com/forward-wang/p/5970806.html

分布式队列神器 Celery:https://segmentfault.com/a/1190000008022050

celery最佳实践:https://my.oschina.net/siddontang/blog/284107

Celery 分布式任务队列快速入门:http://www.cnblogs.com/alex3714/p/6351797.html

异步任务神器 Celery 快速入门教程:https://blog.csdn.net/chenqiuge1984/article/details/80127446

定时任务管理之python篇celery使用:http://student-lp.iteye.com/blog/2093397

异步任务神器 Celery:http://python.jobbole.com/87086/

celery任务调度框架实践:https://blog.csdn.net/qq_28921653/article/details/79555212

Celery-4.1 用户指南: Monitoring and Management Guide:https://blog.csdn.net/libing_thinking/article/details/78592801

Celery安装及使用:https://blog.csdn.net/u012325060/article/details/79292243

Celery学习笔记(一):https://blog.csdn.net/sdulsj/article/details/73741350

二、初步认识

Celery 是一个包含一系列的消息任务队列。您可以不用了解内部的原理直接使用,它的使用时非常简单的。此外 Celery 可以快速与您的产品扩展与集成,以及 Celery 提供了一系列 Celery 可能会用到的工具和技术支持方案。

在本教程中,您将学习 Celery 的基础支持。

学习如下:

    • 选择并且安装一个消息中间件(Broker)

    • 安装 Celery 并且创建第一个任务

    • 运行职程(Worker)以及调用任务

    • 跟踪任务的情况以及返回值

选择中间人(Broker)Celery 需要一个中间件来进行接收和发送消息,通常以独立的服务形式出现,成为 消息中间人(Broker)

以下有几种选择:

RabbitMQ

RabbitMQ 的功能比较齐全、稳定、便于安装。在生产环境来说是首选的,有关 Celery 中使用 RabbitMQ 的详细信息:

使用RabbitMQ

如果您使用的是 Ubuntu 或 Debian ,可以通过以下命令进行安装 RabbitMQ

$ sudo apt-get install rabbitmq-server

如果在 Docker 中运行 RabbitMQ ,可以使用以下命令:

$ docker run -d -p 5462:5462 rabbitmq

命令执行完毕之后,中间人(Broker)会在后台继续运行,准备输出一条 Starting rabbitmq-server: SUCCESS 的消息。

安装 Celery

Celery 在 python 的 PyPI 中管理,可以使用 pip 或 easy_install 来进行安装:

$ pip install celery
应用

创建第一个 Celery 实例程序,我们把创建 Celery 程序成为 Celery 应用或直接简称 为 app,创建的第一个实例程序可能需要包含 Celery 中执行操作的所有入口点,例如创建任务、管理职程(Worker)等,所以必须要导入 Celery 模块。

在本教程中将所有的内容,保存为一个 app 文件中。针对大型的项目,可能需要创建 独立的模块。

首先创建 tasks.py:

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

第一个参数为当前模块的名称,只有在 __main__ 模块中定义任务时才会生产名称。

第二个参数为中间人(Broker)的链接 URL ,实例中使用的 RabbitMQ(Celery默认使用的也是RabbitMQ)。

更多相关的 Celery 中间人(Broker)的选择方案,可查阅上面的中间人(Broker)。例如,对于 RabbitMQ 可以写为 amqp://localhost ,使用 Redis 可以写为 redis://localhost。

创建了一个名称为 add 的任务,返回的俩个数字的和。

运行 Celery 职程(Worker)服务

现在可以使用 worker 参数进行执行我们刚刚创建职程(Worker):

$ celery -A tasks worker --loglevel=info

在生产环境中,如果需要将职程(Worker)作为守护进程在后台运行,可以使用平台提供的工具来进行实现,或使用类似 supervisord 这样的工具来进行管理(详情: 守护进程:Daemonization部分)

调用任务

需要调用我们创建的实例任务,可以通过 delay() 进行调用。

delay()apply_async() 的快捷方法,可以更好的控制任务的执行(详情:调用任务:Calling Tasks):

>>> from tasks import add
>>> add.delay(4, 4)

该任务已经有职程(Worker)开始处理,可以通过控制台输出的日志进行查看执行情况。

调用任务会返回一个 AsyncResult 的实例,用于检测任务的状态,等待任务完成获取返回值(如果任务执行失败,会抛出异常)。默认这个功能是不开启的,如果开启则需要配置 Celery 的结果后端,下一小节会详细说明。

保存结果

如果您需要跟踪任务的状态,Celery 需要在某处存储任务的状态信息。Celery 内置了一些后端结果:SQLAlchemy/Django ORM、MemcachedRedis、 RPC (RabbitMQ/AMQP)以及自定义的后端结果存储中间件。

针对本次实例,我们使用 RPC 作为结果后端,将状态信息作为临时消息回传。后端通过 backend 参数指定给 Celery(或者通过配置模块中的 result_backend 选项设定):

可以使用Redis作为Celery结果后端,使用RabbitMQ作为中间人(Broker)可以使用以下配置(这种组合比较流行):

app = Celery('tasks', backend='redis://localhost', broker='pyamqp://')

 

posted @ 2021-08-19 15:42  vroker  阅读(61)  评论(1)    收藏  举报