查看“分布式任务队列Celery”的源代码
←
分布式任务队列Celery
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==Celery简介== 随着信息时代的持续发展,越来越复杂的业务需求对自动化运维的要求上了一个新的台阶,任务调度系统也由单一主机任务调度系统向分布式任务调度系统过渡。无论是业务层面的作业调度还是运维本身的作业调度需求,分布式的任务也越来越普及。本章将介绍一个非常优秀的开源分布式任务队列——Celery。Celery是一个简单、灵活且可靠的,可以处理大量消息的分布式系统,并且提供了维护这样一个系统的必需工具。它是一个专注于实时处理的任务队列,同时也支持任务调度 Celery是由纯Python编写的,但协议可以用任何语言实现。目前,已有Ruby实现的RCelery、Node.js实现的node-celery及一个PHP客户端,语言互通也可以通过using webhooks实现。在使用Celery之前,我们先来了解以下几个概念: ==Celery概念== ===任务队列=== 任务队列:简单来说,任务队列就是存放着任务的队列,客户端将要执行任务的消息放入任务队列中,执行节点worker进程持续监视队列,如果有新的任务,就取出来执行该任务。这种机制就像生产者、消费者模型一样,客户端作为生产者,执行节点worker作为消费者,它们之前通过任务队列进行传递, [[文件:python20-14-4.png]] 可以看到,Celery 主要包含以下几个模块: ===任务模块 Task=== 包含异步任务和定时任务。其中,异步任务通常在业务逻辑中被触发并发往任务队列,而定时任务由 Celery Beat 进程周期性地将任务发往任务队列。 ===消息中间件 Broker=== Broker,即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列。Celery 本身不提供队列服务,官方推荐使用 RabbitMQ 和 Redis 等。 官方给出的实现broker的工具。 [[文件:python20-14-2.png]] 在实际使用中,我们选择RabbitMQ或Redis作为中间人。 ===任务执行单元 Worker=== Worker 是执行任务的处理单元,它实时监控消息队列,获取队列中调度的任务,并执行它。 ===任务结果存储 Backend=== Backend 用于存储任务的执行结果,以供查询。同消息中间件一样,存储也可使用 RabbitMQ, redis 和 MongoDB 等。 ==安装Celery== 我们可以从Python Package Index(PyPI)安装或者使用源代码安装Celery,推荐使用pip安装。 ===使用pip安装=== pip3 install celery ===使用源代码安装=== (http://pypi.python.org/pypi/celery/)。 $ tar xvfz celery-0.0.0.tar.gz $ cd celery-0.0.0 $ python setup.py build $ python setup.py install #这里如果不是在virtualenv中安装,就需要使用root权限安装 ==Celery与Python3.7及以上的兼容性== https://www.cnblogs.com/breakcircle/p/12721335.html 报错”from kombu.async.timer import Entry, Timer as Schedule, to_timestamp, logger”, 这是因为在 python 3.7 中将 async 作为了关键字,所以当 py 文件中出现类似 from . import async, base 这类不符合python语法的语句时,Python会报错; 解决方法: 在 celery 官方的提议下,建议将 kombu下的async.py 文件的文件名改成 asynchronous;然后把引用和这个文件的所有文件的里面的async改为asynchronous; [[文件:python20-14-3.png]] ==安装Redis== wget http://download.redis.io/releases/redis-4.0.11.tar.gz [root@localhost opt]# tar xzf redis-4.0.11.tar.gz [root@localhost opt]# cd redis-4.0.11 [root@localhost redis-4.0.11]# make make完后redis-4.0.11目录下会出现编译后的Redis服务程序redis-server,以及用于测试的客户端程序redis-cli,两个程序位于安装目录src目录下。 ===启动Redis服务=== ====默认启动==== cd src ./redis-server <nowiki>84198:C 30 May 11:04:04.779 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 84198:C 30 May 11:04:04.780 # Redis version=4.0.11, bits=64, commit=00000000, modified=0, pid=841 98, just started 84198:C 30 May 11:04:04.780 # Warning: no config file specified, using the default config. In ord er to specify a config file use ./redis-server /path/to/redis.conf 84198:M 30 May 11:04:04.780 * Increased maximum number of open files to 10032 (it was originally set to 1024). _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 4.0.11 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 84198 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' </nowiki> ====根据配置文件启动==== cd src ./redis-server ../redis.conf redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。 ===功能测试=== 启动Redis服务进程后,就可以使用测试客户端程序redis-cli和Redis服务交互了。例如: [root@localhost redis-4.0.11]# cd src [root@localhost src]# ./redis-cli 127.0.0.1:6379> set foo bar OK 127.0.0.1:6379> get foo "bar" 127.0.0.1:6379> set maxin good_teacher OK 127.0.0.1:6379> get maxin "good_teacher" 说明安装成功 配置Celery的BROKER_URL,Redis默认的连接URL如下: BROKER_URL = 'redis://localhost:6379/0' URL的格式为redis://:password@hostname:port/db_number。URL Scheme后的所有字段都是可选的,并且默认为localhost的6479端口,使用数据库0。
返回至
分布式任务队列Celery
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息