Python 并行编程手册
  • 推荐0
  • 收藏9
  • 浏览1.8K

Python 并行编程手册

【意】Giancarlo Zaccone (作者)  张龙 , 宋秉金 (译者) 刘舫 (责任编辑)

  • 书  号:978-7-121-33753-6
  • 出版日期:2018-04-01
  • 页  数:
  • 开  本:
  • 出版状态:上市销售
  • 原书名: Python Parallel Programming Cookbook
  • 原书号:9781785289583
  • 维护人:许艳
纸质版 ¥59.00
本书共分为6章,从原理到实践对并行编程技术进行了层层剖析,并通过大量实例(除GPU编程示例外,均基于Python 3)演示了每一个知识点的具体运用方式,是提升并行编程技能的一本不可多得的好书。
相信本书的出版将会填补Python在并行领域应用的一大空白,能够帮助想要从事并行编程与并行计算的读者提升实践能力,并将这一能力应用到实际的项目开发中。
5大主题,涵盖多种场景下的并行编程:线程同步、进程通信、异步编程、分布式计算、GPU编程;绝大多数示例基于Python 3

前言
计算机科学的研究不仅应该涵盖计算处理所基于的原则,还应该反映出这些领域当前的知识状态。时至今日,技术的发展要求来自计算机科学所有分支领域的专家通晓软件与硬件,它们之间的交互是理解计算处理基本原理的关键所在。
出于这个原因,本书特别关注硬件架构与软件之间的关系。
之前,程序员可以借助于硬件设计、编译器与芯片让其软件程序在不做任何修改的情况下,速度变得更快或效率更高。
这个时代已然结束。现在,如果希望程序运行速度能变得更快,那么它必须要成为一个并行程序。
虽然很多研究人员的目标是程序员不需要了解运行其程序的硬件所具有的并行性,不过要想实现这个梦想还需要很多年的时间。今天,大多数程序员还是需要透彻理解硬件与软件之间的联系,这样程序才能在现代计算机架构上高效运行。
为了介绍并行编程的概念,我们使用了 Python编程语言。 Python很有趣,且易于使用,其流行度在近几年稳步上升。 Python是由 Guido van Rossum在 10多年前开发出来的, Python语法的简洁性与易于使用的特性很大程度上来源于 ABC,这是一门于 20世纪 80年代开发出来的教学语言。
除了这个具体的上下文外,Python还被用于解决实际的问题,它从一些典型的编程语言中借鉴了很多特性,比如说 C ++、Java与 Scheme等。这是其最卓越的特性之一,使得它广受专业软件开发者、科学研究产业以及计算机科学教育者的青睐。之所以有这么多人喜欢 Python,一个原因是它在实践与概念之间提供了最佳的平衡。 Python是一门解释型语言,因此无须陷入
编译与链接的泥潭中就可以立刻动手做事情。 Python还提供了广泛的软件库,可用在从 Web开发、图形学到并行计算的各种任务中。这种侧重于实践的特性非常吸引广大读者,可以让大家运行本书所介绍的重要项目。
本书提供了大量的示例,这些示例的灵感来源于很多场景,可以用它们解决实际问题。本书介绍了并行架构的软件设计原则,并确保程序清晰可读,避免使用一些复杂技术,都是一些简单且直接的示例。每个主题都以一个完整、可运行的 Python程序的一个片段来阐述,后面跟着的是程序的输出结果。
书中各章节采用模块化的方式组织,可以从最简单的讨论跳到高级的主题,这么做也适合于那些只想学习一些特定主题的读者。
我希望本书这样的结构与内容安排能够帮助读者更好地理解和掌握并行编程技术。
本书主要内容
第 1章概览了并行编程架构与编程模型。本章介绍了 Python编程语言、语言的特性、其易于使用和学习的特点、可扩展性以及丰富的软件库与应用。此外,本章还介绍了如何在应用以及并行计算中用好 Python这个工具。
第 2章介绍了如何通过 Python线程模块来实现线程并行。通过完整的编程示例,读者将学习到如何同步和操纵线程来实现多线程应用。
第 3章介绍了基于进程的用于并行化程序的方式。本章通过完整的示例展示了如何使用 Python多线程模块。此外,本章还介绍了如何通过进程来实现通信,借助 Python的 mpi4py模块使用消息传递的并行编程范式。
第 4章介绍了并发编程的异步模式。在某些方面,它要比基于线程的方式简单一些,因为它提供了单指令流,任务会明确放弃控制而非武断地挂起。本章介绍了如何通过 Python asyncio模块将每个任务组织为一系列更小的步骤,并在异步模式下执行。
第 5章介绍了分布式计算。它指的是从逻辑上(甚至可能是地理位置上分布的)聚合几个计算单元,并以一种透明且一致的方式协同运行单个计算任务的过程。本章将会介绍 Python所提供的,使用面向对象、 Celery、SCOOP、远程过程调用的架构实现解决方案,比如,Pyro4与 RPyC。本章也介绍了其他不同的方式,如 PyCSP、Disco,后者是 Python版本的 MapReduce算法。
第 6章介绍了现代图形处理单元( GPU),它使数值计算的性能有了突破性提升,代价则是编程复杂度的增加。实际上, GPU编程模型要求程序员手工管理 CPU与 GPU之间的数据传输。本章将会通过程序示例与用例介绍如何使用 GPU卡所提供的计算能力,其中使用了强大的 Python模块: PyCUDA、NumbaPro与 PyOpenlCL。

阅读前的准备
本书所有示例都已经在 Windows 7的 32位机器上进行过测试。此外,使用 Linux环境将会对学习大有裨益。
运行示例所需的 Python版本是:
. Python 3.3(前 5章)

. Python 2.7(只有第 6章需要)


需要使用到如下模块(都是可以自由下载的):
. mpich-3.1.4

. pip 6.1.1

. mpi4py1.3.1

. asyncio 3.4.3

. Celery 3.1.18

. Numpy 1.9.2


. Flower 0.8.32(可选)

. SCOOP 0.7.2

. Pyro 4.4.36

. PyCSP 0.9.0

. DISCO 0.5.2

. RPyC 3.3.0

. PyCUDA 2015.1.2

. CUDA Toolkit 4.2.9(最低为此版本)

. NVIDIA GPU SDK 4.2.9(最低为此版本)

. NVIDIA GPU驱动

. Microsoft Visual Studio 2008 C++ Express Edition(最低为此版本)

. Anaconda Python Distribution

. NumbaPro编译器

. PyOpenCL 2015.1

. Win32 OpenCL Driver 15.1(最低为此版本)



本书面向的读者
本书是写给那些想要使用并行编程技术来编写强大且高效代码的开发者的。阅读完本书后,读者将掌握并行计算的基础知识与高级特性。 Python编程语言易于学习,即便不是专家也能够轻松理解本书所介绍的主题。

本书结构
本书包含如下组成部分。
准备工作
这部分介绍了攻略的主题,描述了如何为该攻略搭建好软件或是进行一些设置。
具体操作
这部分介绍了实现攻略所需要的步骤。
实例精解
这部分通常会对“具体操作”部分的内容进行解释和说明。
知识扩展
这部分包含了关于攻略的一些额外信息,目的在于使读者更加深入地理解攻略的内容。
参考
这部分包含一些关于攻略的参考信息。


约定
在本书中,你会看到各种样式的文本,用于区分不同类型的信息。下面对这些文本样式及其含义进行一些说明。
文本中的代码、数据库表名、目录名、文件名、文件扩展、路径名、虚拟的 URL、用户输入以及 Twitter handle会这样表示“要执行第一个示例,我们需要用到程序 helloPython-WithThreads.py.”。
代码块样式如下所示:
print ("Hello Python Parallel Cookbook!!")
closeInput = raw_input("Press ENTER to exit")
print "Closing calledProcess"

希望读者注意到代码块中的某一部分时,相关行或是代码会加粗处理:
@asyncio.coroutine
def factorial(number):

do Something
@asyncio.coroutine
任何命令行输入或是输出的样式如下所示:
C:\>mpiexec -n 4 python virtualTopology.py

警告或是重要的说明位于框中。
提示与技巧位于这个图标后。



目录

1 并行计算与Python起步...............................................1

介绍 ..................................1
并行计算内存架构 ..........2
内存组织 ..........................5
并行编程模型 ................10
如何设计并行程序 ........12
如何评估并行程序的性能 ....................................................14
Python简介 ....................16
并行世界中的Python ....20
进程与线程介绍 ............21
开始在Python中使用进程 ....................................................21
开始在Python中使用线程 ....................................................23

2 基于线程的并行. .27

介绍 ................................27
使用Python的线程模块 28
如何定义线程 ................28
如何确定当前的线程 ....30
如何在子类中使用线程 32
使用Lock与RLock实现线程同步 ........................................34
使用RLock实现线程同步 .....................................................38
使用信号量实现线程同步 ....................................................40
使用条件实现线程同步 44
使用事件实现线程同步 47
使用with语句 ................51
使用队列实现线程通信 53
评估多线程应用的性能 57

3 基于进程的并行63

介绍 ................................64
如何生成进程 ................64
如何对进程命名 ............66
如何在后台运行进程 ....68
如何杀死进程 ................69
如何在子类中使用进程 70
如何在进程间交换对象 72
如何同步进程 ................78
如何管理进程间状态 ....81
如何使用进程池 ............82
使用mpi4py模块 ...........84
点对点通信 ....................87
避免死锁问题 ................91
使用广播实现聚合通信 94
使用scatter实现聚合通信 .....................................................96
使用gather实现聚合通信 ......................................................99
使用Alltoall实现聚合通信 .................................................101
汇聚操作 ......................103
如何优化通信 ..............105

4 异步编程. ........111

介绍 .............................. 111
使用 Python的 concurrent.futures 模块 .............................. 112
使用Asyncio实现事件循环管理 ........................................ 116
使用Asyncio处理协程 120
使用Asyncio管理任务 125
使用Asyncio和Futures 128

5 分布式Python133

介绍 ..............................133
使用 Celery 分发任务 .134
如何使用 Celery 创建任务 .................................................136
使用 SCOOP进行科学计算 ...............................................139
使用 SCOOP处理映射函数 ...............................................143
使用 Pyro4 远程调用方法 ..................................................147
使用 Pyro4 链接对象 ..150
使用 Pyro4 开发一个客户端-服务器应用.........................156
使用 PyCSP实现顺序进程通信 ........................................162
在Disco中使用 MapReduce ................................................167
使用 RPyC 调用远程过程 ..................................................172

6 使用Python进行GPU编程. ......................................175

介绍 ..............................175
使用 PyCUDA模块 ....177
如何构建一个 PyCUDA应用 ............................................181
通过矩阵操作理解 PyCUDA内存模型 ............................186
使用 GPUArray 调用内核 ..................................................192
使用 PyCUDA对逐元素表达式求值 ................................194
使用 PyCUDA进行 MapReduce 操作 ...............................198
使用 NumbaPro 进行GPU编程 ..........................................201
通过 NumbaPro 使用 GPU 加速的库 ................................206
使用 PyOpenCL模块 .. 211
如何构建一个 PyOpenCL应用 ..........................................214
使用PyOpenCL对逐元素表达式求值 ................................218
使用 PyOpenCL测试 GPU 应用 ........................................221


读者评论

相关图书

AI魔法绘画:用Stable Diffusion挑战无限可能

陈然 (作者)

本书以实际操作为导向,详细讲解基于Stable Diffusion进行AI绘画的完整学习路线,包括绘画技巧、图片生成、提示词编写、ControlNet插件、模型...

 

一本书读懂ChatGPT

魏进锋 (作者)

本书以通俗易懂的语言对ChatGPT进行全面讲解。 本书分为10章。 第1章对ChatGPT及ChatGPT的创造者OpenAI进行初步讲解。 第2章讲解...

 

可解释人工智能导论

杨强 范力欣 朱军 陈一昕 张拳石 朱松纯 陶大程 崔鹏 周少华 刘琦 黄萱菁 张永锋 (作者)

本书全面介绍可解释人工智能的基础知识、理论方法和行业应用。全书分为三部分,共11 章。第一部分为第1 章,揭示基于数据驱动的人工智能系统决策机制,提出一种基于人...

 

隐私计算

陈凯 杨强 (作者)

在大数据和人工智能时代,如何在享受新技术带来的便利性的同时保护自己的隐私,是一个重要的问题。本书系统讲解了隐私计算的基础技术和实践案例,全书共有11 章,按层次...

 

知识图谱与认知智能:基本原理、关键技术、应用场景与解决方案

吴睿 (作者)

认知的高度决定了你创造价值的高度,包括你对世界的认知及世界对你的认知。知识图谱与认知智能技术的发展,既孕育了圈层变更的机会,也带来了人、机器、企业如何协同与博弈...

 

实用推荐系统

Kim Falk (作者) 李源 朱罡罡 温睿 (译者)

要构建一个实用的“智能”推荐系统,不仅需要有好的算法,还需要了解接收推荐的用户。本书分为两部分,第一部分侧重于基础架构,主要介绍推荐系统的工作原理,展示如何创建...

¥119.00