python并行编程 - 分布式篇
目录1
介绍篇
线程篇
进程篇
异步篇
GPU篇
分布式篇
简述
分布式计算的基本理念是将工作划分为一个一个小任务,分发给多台设备处理,再汇总结果。在分布式计算中,网络中的机器必须要保持可用(延迟误差、意外宕机等等),需要一个持续监控架构
分布式多进程2
multiprocessing
的子模块managers
还支持把多进程分布在多台机器上,managers
模块已经封装好了网络通信的细节
实现方法:我们可以使用managers
模块将queue
队列通过网络暴露出去,让其它机器访问到这个队列,然后就可以通过它实现数据交换
示例:
服务器通过暴露queue到网络,放入数据到队列,让客户端取出数据处理,再放回结果
服务器代码
# task_master.pyimport random, time, queue
from multiprocessing.managers import BaseManager# 发送任务的队列:
task_queue = queue.Queue()
# 接收结果的队列:
result_queue = queue.Queue()# 从BaseManager继承的QueueManager:
class QueueManager(BaseManager):pass# 把两个Queue都注册到网络上, callable参数关联了Queue对象:
QueueManager.register('get_task_queue', callable=lambda: task_queue)
QueueManager.register('get_result_queue', callable=lambda: result_queue)
# 绑定端口5000, 设置验证码'abc':
manager = QueueManager(address=('', 5000), authkey=b'abc')
# 启动Queue:
manager.start()
# 获得通过网络访问的Queue对象:
task = manager.get_task_queue()
result = manager.get_result_queue()
# 放几个任务进去:
for i in range(10):n = random.randint(0, 10000)print('Put task %d...' % n)task.put(n)
# 从result队列读取结果:
print('Try get results...')
for i in range(10):r = result.get(timeout=10)print('Result: %s' % r)
# 关闭:
manager.shutdown()
print('master exit.')
客户端代码
# task_worker.pyimport time, sys, queue
from multiprocessing.managers import BaseManager# 创建类似的QueueManager:
class QueueManager(BaseManager):pass# 由于这个QueueManager只从网络上获取Queue,所以注册时只提供名字:
QueueManager.register('get_task_queue')
QueueManager.register('get_result_queue')# 连接到服务器,也就是运行task_master.py的机器:
server_addr = '127.0.0.1'
print('Connect to server %s...' % server_addr)
# 端口和验证码注意保持与task_master.py设置的完全一致:
m = QueueManager(address=(server_addr, 5000), authkey=b'abc')
# 从网络连接:
m.connect()
# 获取Queue的对象:
task = m.get_task_queue()
result = m.get_result_queue()
# 从task队列取任务,并把结果写入result队列:
for i in range(10):try:n = task.get(timeout=1)print('run task %d * %d...' % (n, n))r = n*ntime.sleep(1)result.put(r)except Queue.Empty:print('task queue is empty.')
# 处理结束:
print('worker exit.')
分布式架构库
这篇仅是简单的分布式的简单操作,更多详情,搜索以下的内容作为关键字
使用面向对象模式和远程调用模式实现分布式框架的库,如Celery、SCOOP、Pyro4、RPyC,还有使用MapReduce实现的PyCSP、Disco
Celery:是一个用于管理分布式任务的Python框架
SCOOP:(Scalable Concurrent Operations in Python)用于进行科学计算
Pyro4:(Python Remote Object)远程调用方法,类似于java中远程方法调用(RMI)的库,支持调用远程对象(属于不同进程,或不同机器上)的方法,就好像它是本地对象
PyCSP:是基于通信的顺序进程(communicating sequential processes,简称CSP)的一个Python模块,它是通过消息传递方式构建并发程序的一种编程范式,特点:进程间的消息交换、通过线程使用共享内存、通过通道完成信息交换
Disco:是一个基于谷歌推出的MapReduce框架的Python模块,支持在计算机集群中管理大规模分布式数据
参考书籍:《Python并行编程手册》 ↩︎
这段代码完全参考:廖雪峰 -分布式进程 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431929340191970154d52b9d484b88a7b343708fcc60000 ↩︎
python并行编程 - 分布式篇相关推荐
- Python并发编程理论篇
Python并发编程理论篇 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识 ...
- Python 并行编程教程 | Lynda教程 中文字幕
Python 并行编程教程 | Lynda教程 中文字幕 Python Parallel Programming Solutions 课程ID: 604237 时长: 4.0小时 所属类别:Pytho ...
- Python 并行编程
参考:python-parallel-programming-cookbook-cn:https://python-parallel-programmning-cookbook.readthedocs ...
- python多线程和多进程——python并行编程实验
工作中经常涉及到加速程序的运行,除了代码逻辑的优化,算法的优化之外,还经常使用的一招就是并发编程.至于python的并型编程这一块.说到并行编程,我们不得不谈线程和进程这两个概念: 进程:对于操作系统 ...
- python多线程并行编程,Python并行编程(二):基于线程的并行
1.介绍 软件应用中使用最广泛的并行编程范例是多线程.通常一个应用有一个进程,分成多个独立的线程,并行运行.互相配合,执行不同类型的任务. 线程是独立的处理流程,可以和系统的其他线程并行或并发地执行. ...
- python中的多线程求值串行和并行_python多线程和多进程——python并行编程实验
工作中经常涉及到加速程序的运行,除了代码逻辑的优化,算法的优化之外,还经常使用的一招就是并发编程.至于python的并型编程这一块.说到并行编程,我们不得不谈线程和进程这两个概念: + 进程:对于操作 ...
- Python少儿编程入门篇(2)算术运算和赋值运算
Python少儿编程小课堂(二) 入门篇(2)算术运算和赋值运算 标识符 就是一个名字,就好像我们每个人都有自己的名字一样,主要作用就给变量.函数.类.模块以及其他对象起名字. 命名规则 1. 标识符 ...
- Python少儿编程入门篇(3)比较运算和逻辑运算
Python少儿编程小课堂(三) 入门篇(3)比较运算和逻辑运算 运算符(2) 上一节课讲了算术运算符和赋值运算符,本节继续讲其它运算符: 比较运算符 ==.!=.>.<.>= .& ...
- Python异步编程入门篇
本人很懒,不想详细些过程,后续会更新代码也许,具体文章推荐链接 ---------深入理解Python异步编程-----–
- python并行编程篇
章节目录 第二十一章 进程对象 进程的理解 操作系统 OS发展史 第二十二章 进程并发 进程并发的原理 进程并发编程实践 僵尸进程与孤儿进程(linux系统) 守护进程 互斥锁 IPC机制(进程间的通 ...
最新文章
- 访中科曙光智能计算技术总监许涛:重新认识面向未来的AI服务器和云计算中心...
- 1077: 字符串加密
- LSM Tree 学习笔记——MemTable通常用 SkipList 来实现
- 为什么做软件类项目,会出现人多,事少,工作量大的情况?
- DLX (Dancing Links/舞蹈链)算法——求解精确覆盖问题
- 逻辑漏洞之修改响应包绕过登录校验
- android bilibili搜索框,仿bilibili搜索框效果(三句代码实现)
- qgis折点打断_arcgis在折点处打断并建立网络分析(最短路径等问题)
- JMeter4.0使用笔记 使用Badboy录制脚本,使用代理录制脚本
- json字符串多了双引号_Python-数据解析-json模块 !
- 数据结构c java_Java - 数据结构
- ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存
- 元素内容必须由格式正确的字符数据或标记组成_Blockly Fields积木表单元素
- Hive基础调优详解
- 毕设系统之网上订餐管理系统
- 天猫官方出品运营宝典-小二带你解读行业趋势
- laxTex 手写体
- 零基础入门网络,静态LACP链路捆绑详解,带宽扩容,链路冗余备份
- 标签thead与th的区别
- 餐厅预订APP多少钱一套?餐厅预订APP如何收费?