若想充分利用所有的計算資源來構建高效的軟件系統,并行編程技術是不可或缺的一項技能。本書以Python為藍本,對并行編程領域的各項技術與知識進行了廣泛且深入的講解。通過對本書的學習,讀者將能夠快速且準確地掌握并行編程方方面面的技能,從而應用在自己的項目開發中,提升系統運行效率。本書共分為6章,從原理到實踐系統化地對并行編程技術進行了層層剖析,并通過大量可運行的實例演示了每一個知識點的具體運用方式,是提升并行編程技能的一本不可多得的好書。相信本書的出版將會填補Python在并行領域應用的一大空白,能夠幫助想要從事并行編程與并行計算的讀者提升實踐能力,并將這一能力應用到實際的項目開發中。
Giancarlo Zaccone擁有超過10年的管理研發項目的經驗,涉及到科學與工業這兩個領域。他曾以研究員身份就職于國家研究委員會(CNR),主要從事一些并行科學計算與科學可視化項目。他目前作為一名軟件工程師就職于一家咨詢公司,主要負責開發和維護一些面向太空和防御應用的軟件系統。Giancarlo擁有那不勒斯費德里科II大學的物理學碩士學位,并且獲得了羅馬大學科學計算專業的第二研究生學位。可以通過https://it.linkedin.com/in/giancarlozaccone了解到關于Giancarlo的更多信息。
兩位譯者均擁有10年以上的系統研發與管理經驗,關注領域主要有高并發程序設計、JVM設計與實現、函數式編程與分布式系統設計與實現。對于編寫優雅的代碼有著不懈的追求,喜歡一切簡單而美好的事物。
目錄
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