“分布式任务队列Celery”的版本间的差异
第118行: | 第118行: | ||
说明安装成功 | 说明安装成功 | ||
+ | |||
+ | 配置Celery的BROKER_URL,Redis默认的连接URL如下: | ||
+ | |||
+ | BROKER_URL = 'redis://localhost:6379/0' | ||
+ | |||
+ | URL的格式为redis://:password@hostname:port/db_number。URL Scheme后的所有字段都是可选的,并且默认为localhost的6479端口,使用数据库0。 |
2020年5月30日 (六) 03:56的版本
目录
Celery简介
随着信息时代的持续发展,越来越复杂的业务需求对自动化运维的要求上了一个新的台阶,任务调度系统也由单一主机任务调度系统向分布式任务调度系统过渡。无论是业务层面的作业调度还是运维本身的作业调度需求,分布式的任务也越来越普及。本章将介绍一个非常优秀的开源分布式任务队列——Celery。Celery是一个简单、灵活且可靠的,可以处理大量消息的分布式系统,并且提供了维护这样一个系统的必需工具。它是一个专注于实时处理的任务队列,同时也支持任务调度。
Celery是由纯Python编写的,但协议可以用任何语言实现。目前,已有Ruby实现的RCelery、Node.js实现的node-celery及一个PHP客户端,语言互通也可以通过using webhooks实现。在使用Celery之前,我们先来了解以下几个概念:
Celery概念
任务队列
任务队列:简单来说,任务队列就是存放着任务的队列,客户端将要执行任务的消息放入任务队列中,执行节点worker进程持续监视队列,如果有新的任务,就取出来执行该任务。这种机制就像生产者、消费者模型一样,客户端作为生产者,执行节点worker作为消费者,它们之前通过任务队列进行传递,
中间人
中间人(broker):Celery用于消息通信,通常使用中间人(broker)在客户端和worker之前传递,这个过程从客户端向队列添加消息开始,之后中间人把消息派送给worker。官方给出的实现broker的工具。
在实际使用中,我们选择RabbitMQ或Redis作为中间人。
安装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;
安装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
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 `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-'
根据配置文件启动
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。