Python如何快速实现分布式任务


Posted in Python onJuly 06, 2017

深入读了读python的官方文档,发觉Python自带的multiprocessing模块有很多预制的接口可以方便的实现多个主机之间的通讯,进而实现典型的生产者-消费者模式的分布式任务架构。

之前,为了在Python中实现生产者-消费者模式,往往就会选择一个额外的队列系统,比如rabbitMQ之类。此外,你有可能还要设计一套任务对象的序列化方式以便塞入队列。如果没有队列的支持,那不排除有些同学不得不从socket服务器做起,直接跟TCP/IP打起交道来。

其实multiprocessing.managers中有个BaseManager就为开发者提供了这样一个快速接口。

我们假定的场景是1个生产者(producer.py)+8个消费者(worker.py)的系统,还有一个中央节点负责协调(server.py)实现如下:

server.py

from multiprocessing.managers import BaseManager
import Queue

queue = Queue.Queue() #初始化一个Q,用于消息传递
class QueueManager(BaseManager):
  pass

QueueManager.register('get_queue', callable=lambda:queue) # 在系统中发布get_queue这个业务

if __name__ == '__main__':
  m = QueueManager(address=('10.239.85.193', 50000),authkey='abr' )
 # 监听所有10.239.85.193的50000口
  s = m.get_server()
  s.serve_forever()

worker.py

from multiprocessing.managers import BaseManager
from multiprocessing import Pool


class QueueManager(BaseManager):
 pass

QueueManager.register('get_queue') 

def feb(i): #经典的'山羊增殖'
  if i < 2: return 1
  if i < 5 : return feb(i-1) + feb(i-2)
  return feb(i-1) + feb(i-2) - feb(i-5)

def worker(i): 
  m = QueueManager(address=('10.239.85.193', 50000), authkey='abr')
#连接server
  m.connect()
  while True:
    queue = m.get_queue()
# 获取Q
   c = queue.get()
 print feb(c)

if __name__ == '__main__':

  p = Pool(8) # 分进程启动8个worker
  p.map(worker, range(8))
producer.py

from multiprocessing.managers import BaseManager


class QueueManager(BaseManager):
  pass
QueueManager.register('get_queue')


if __name__ == '__main__':
 m = QueueManager(address=('10.239.85.193', 50000), authkey='abr')
 m.connect()
 i = 0
 while True:
   queue = m.get_queue()
   queue.put(48)

   i+=1

系统会直接将Queue() 对象中的数据直接封装后通过TCP 50000端口在主机之间传递。不过需要注意的是,由于authkey的缘故,各个节点要求python的版本一致。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python自定义函数的创建、调用和函数的参数详解
Mar 11 Python
Django中的“惰性翻译”方法的相关使用
Jul 27 Python
Python之re操作方法(详解)
Jun 14 Python
基于DataFrame筛选数据与loc的用法详解
May 18 Python
Django model序列化为json的方法示例
Oct 16 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
pandas删除指定行详解
Apr 04 Python
python 利用turtle库绘制笑脸和哭脸的例子
Nov 23 Python
pycharm通过ssh连接远程服务器教程
Feb 12 Python
python 给图像添加透明度(alpha通道)
Apr 09 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
Jun 03 Python
使用Python+Appuim 清理微信的方法
Jan 26 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 #Python
Python标准库sched模块使用指南
Jul 06 #Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 #Python
基于Python的关键字监控及告警
Jul 06 #Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 #Python
利用python模拟sql语句对员工表格进行增删改查
Jul 05 #Python
利用python实现简单的循环购物车功能示例代码
Jul 05 #Python
You might like
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
jquery实现Ctrl+Enter提交表单的方法
2015/07/21 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
小程序开发之模态框组件封装
2020/04/23 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
[05:17]DOTA2睡衣妹卖萌求签名 CJ第二天全明星影像
2013/07/28 DOTA
[01:32:22]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第一场 2月5日
2021/03/11 DOTA
python命令行参数sys.argv使用示例
2014/01/28 Python
Python下Fabric的简单部署方法
2015/07/14 Python
Django 使用Ajax进行前后台交互的示例讲解
2018/05/28 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
Python字典遍历操作实例小结
2019/03/05 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
最美家庭活动方案
2014/08/31 职场文书
违反工作规定检讨书范文
2014/12/14 职场文书
琅琊山导游词
2015/02/05 职场文书
滴水洞导游词
2015/02/10 职场文书