Python学习-九周二次课(12月19日)

九周二次课(12月19日)
17.1 celery简介
17.2 celery小例子python

 

Celery 是什么?git

Celery 是一个由 Python 编写的简单、灵活、可靠的用来处理大量信息的分布式系统,它同时提供操做和维护分布式系统所需的工具。github

Celery 专一于实时任务处理,支持任务调度。redis

说白了,它是一个分布式队列的管理工具,咱们能够用 Celery 提供的接口快速实现并管理一个分布式的任务队列。app

首先,咱们要理解 Celery 自己不是任务队列,它是管理分布式任务队列的工具,或者换一种说法,它封装好了操做常见任务队列的各类操做,咱们用它能够快速进行任务队列的使用与管理,固然你也能够本身看 rabbitmq 等队列的文档而后本身实现相关操做都是没有问题的。异步

Celery 是语言无关的,虽然它是用 Python 实现的,但他提供了其余常见语言的接口支持。只是若是你刚好使用 Python 进行开发那么使用 Celery 就天然而然了。分布式

想让 Celery 运行起来咱们要明白几个概念:函数

1.1 Brokers

brokers 中文意思为中间人,在这里就是指任务队列自己,Celery 扮演生产者和消费者的角色,brokers 就是生产者和消费者存放/拿取产品的地方(队列)工具

常见的 brokers 有 rabbitmq、redis、Zookeeper 等spa

1.2 Result Stores / backend

顾名思义就是结果储存的地方,队列中的任务运行完后的结果或者状态须要被任务发送者知道,那么就须要一个地方储存这些结果,就是 Result Stores 了

常见的 backend 有 redis、Memcached 甚至经常使用的数据均可以。

1.3 Workers

就是 Celery 中的工做者,相似与生产/消费模型中的消费者,其从队列中取出任务并执行

1.4 Tasks

就是咱们想在队列中进行的任务咯,通常由用户、触发器或其余操做将任务入队,而后交由 workers 进行处理。

理解以上概念后咱们就能够快速实现一个队列的操做:

这里咱们用 redis 当作 celery 的 broker 和 backend。

(其余 brokers 与 backend 支持看这里)

安装 Celery 和 redis 以及 python 的 redis 支持:

 

 

 

这里须要注意若是你的 celery 是 4.0 及以上版本请确保 python 的 redis 库版本在 2.10.4 及以上,不然会出现 redis 链接 timeout 的错误,具体参考

而后,咱们须要写一个task:

 

 

 

 

OK,到这里,broker 咱们有了,backend 咱们有了,task 咱们也有了,如今就该运行 worker 进行工做了,在 tasks.py 所在目录下运行:

 

意思就是运行 tasks 这个任务集合的 worker 进行工做(固然此时broker中尚未任务,worker此时至关于待命状态)

最后一步,就是触发任务啦,最简单方式就是再写一个脚本而后调用那个被装饰成 task 的函数:

 

 

 

运行此脚本

delay 返回的是一个 AsyncResult 对象,里面存的就是一个异步的结果,当任务完成时result.ready() 为 true,而后用 result.get() 取结果便可。

到此,一个简单的 celery 应用就完成啦。

相关文章
相关标签/搜索