python 链式计算框架_python分布式计算之——celery框架简易实践

celery分布式框架实践

celery简介

Celery 是一个强大的 分布式任务队列 的 异步处理框架,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务(async task)和定时任务(crontab)。
Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。
Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。
Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis,memcached, mongodb,SQLAlchemy, Django ORM,Apache Cassandra, IronCache 等。
本例中broker和backend都选择redis。celery的架构如下:

d6670a9b3bbdab5ddff919e40d908f0d.png

celery和redis安装

celery安装

pip install -U Celery

redis安装

$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz$ tar xzf redis-2.8.17.tar.gz$ cd redis-2.8.17$ make

make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:

下面启动redis服务.

$ cd src$ ./redis-server

注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。

$ cd src$ ./redis-server ../redis.conf

redis.conf 是一个默认的配置文件。我们可以根据需要使用自己的配置文件。

启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:

$ cd src$ ./redis-cliredis> set foo barOKredis> get foo"bar"

最后安装python中的redis库,否则celery提示会报错

pip install redis

celery实现简单计算

启动redis server服务
在redis/src目录下按以上步骤启动即可编写任务代码tasks.py
backend和broker都用redis

from celery import Celery# 我们这里案例使用redis作为broker和backendapp = Celery('demo', backend='redis://127.0.0.1:6379/2', broker='redis://127.0.0.1:6379/1')# 创建任务函数@app.taskdef my_task(a, b): print("任务函数正在执行....") return a + b

注意:
这里没有使用redis密码,因为redis server默认启动是不带密码的,否则会出现Client sent AUTH, but no password is set的错误将tasks模块加入worker

celery -A tasks worker --loglevel=info

可以看到打印以下信息,任务成功加入

- ** ---------- .> transport: redis://127.0.0.1:6379/1- ** ---------- .> results: redis://127.0.0.1:6379/2- *** --- * --- .> concurrency: 8 (prefork)-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)--- ***** -----  -------------- [queues] .> celery exchange=celery(direct) key=celery [tasks] . tasks.my_task[2019-11-19 23:35:35,537: INFO/MainProcess] Connected to redis://127.0.0.1:6379/1[2019-11-19 23:35:35,544: INFO/MainProcess] mingle: searching for neighbors[2019-11-19 23:35:36,559: INFO/MainProcess] mingle: all alone[2019-11-19 23:35:36,574: INFO/MainProcess] celery@huzhenghui-desktop ready.

执行任务,并将任务结果写入redis中:

>>> from tasks import my_task>>> ret = my_task.delay(1,2)>>> ret.result3>>> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值