目录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模块,支持在计算机集群中管理大规模分布式数据



  1. 参考书籍:《Python并行编程手册》 ↩︎

  2. 这段代码完全参考:廖雪峰 -分布式进程 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431929340191970154d52b9d484b88a7b343708fcc60000 ↩︎

python并行编程 - 分布式篇相关推荐

  1. Python并发编程理论篇

    Python并发编程理论篇 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识 ...

  2. Python 并行编程教程 | Lynda教程 中文字幕

    Python 并行编程教程 | Lynda教程 中文字幕 Python Parallel Programming Solutions 课程ID: 604237 时长: 4.0小时 所属类别:Pytho ...

  3. Python 并行编程

    参考:python-parallel-programming-cookbook-cn:https://python-parallel-programmning-cookbook.readthedocs ...

  4. python多线程和多进程——python并行编程实验

    工作中经常涉及到加速程序的运行,除了代码逻辑的优化,算法的优化之外,还经常使用的一招就是并发编程.至于python的并型编程这一块.说到并行编程,我们不得不谈线程和进程这两个概念: 进程:对于操作系统 ...

  5. python多线程并行编程,Python并行编程(二):基于线程的并行

    1.介绍 软件应用中使用最广泛的并行编程范例是多线程.通常一个应用有一个进程,分成多个独立的线程,并行运行.互相配合,执行不同类型的任务. 线程是独立的处理流程,可以和系统的其他线程并行或并发地执行. ...

  6. python中的多线程求值串行和并行_python多线程和多进程——python并行编程实验

    工作中经常涉及到加速程序的运行,除了代码逻辑的优化,算法的优化之外,还经常使用的一招就是并发编程.至于python的并型编程这一块.说到并行编程,我们不得不谈线程和进程这两个概念: + 进程:对于操作 ...

  7. ​​Python少儿编程入门篇(2)算术运算和赋值运算

    Python少儿编程小课堂(二) 入门篇(2)算术运算和赋值运算 标识符 就是一个名字,就好像我们每个人都有自己的名字一样,主要作用就给变量.函数.类.模块以及其他对象起名字. 命名规则 1. 标识符 ...

  8. Python少儿编程入门篇(3)比较运算和逻辑运算

    Python少儿编程小课堂(三) 入门篇(3)比较运算和逻辑运算 运算符(2) 上一节课讲了算术运算符和赋值运算符,本节继续讲其它运算符: 比较运算符 ==.!=.>.<.>= .& ...

  9. Python异步编程入门篇

    本人很懒,不想详细些过程,后续会更新代码也许,具体文章推荐链接 ---------深入理解Python异步编程-----–

  10. python并行编程篇

    章节目录 第二十一章 进程对象 进程的理解 操作系统 OS发展史 第二十二章 进程并发 进程并发的原理 进程并发编程实践 僵尸进程与孤儿进程(linux系统) 守护进程 互斥锁 IPC机制(进程间的通 ...

最新文章

  1. 访中科曙光智能计算技术总监许涛:重新认识面向未来的AI服务器和云计算中心...
  2. 1077: 字符串加密
  3. LSM Tree 学习笔记——MemTable通常用 SkipList 来实现
  4. 为什么做软件类项目,会出现人多,事少,工作量大的情况?
  5. DLX (Dancing Links/舞蹈链)算法——求解精确覆盖问题
  6. 逻辑漏洞之修改响应包绕过登录校验
  7. android bilibili搜索框,仿bilibili搜索框效果(三句代码实现)
  8. qgis折点打断_arcgis在折点处打断并建立网络分析(最短路径等问题)
  9. JMeter4.0使用笔记 使用Badboy录制脚本,使用代理录制脚本
  10. json字符串多了双引号_Python-数据解析-json模块 !
  11. 数据结构c java_Java - 数据结构
  12. ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存
  13. 元素内容必须由格式正确的字符数据或标记组成_Blockly Fields积木表单元素
  14. Hive基础调优详解
  15. 毕设系统之网上订餐管理系统
  16. 天猫官方出品运营宝典-小二带你解读行业趋势
  17. laxTex 手写体
  18. 零基础入门网络,静态LACP链路捆绑详解,带宽扩容,链路冗余备份
  19. 标签thead与th的区别
  20. 餐厅预订APP多少钱一套?餐厅预订APP如何收费?

热门文章

  1. 餐厅叫号语音包_医院叫号系统(需自行下载语音包)
  2. Eason's concert
  3. unity 模型销毁_Unity中销毁游戏对象的方式
  4. u8信息服务器,u8服务器和数据库详细
  5. dym 微服务 快速开发框架
  6. macbook linux 双系统,MAC Ubuntu双系统方案
  7. 网络调试助手简单使用教程
  8. 仿京东详情页商品图片查看
  9. 动词ing基本用法_动词-ing的形式及用法
  10. JavaScript进阶 | DOM