Python高性能編程

Python高性能編程

《Python高性能編程》一書由【美】 戈雷利克 / 【美】 歐日沃爾德所著,人民郵電出版社出版發行。

基本介紹

  • 書名:Python高性能編程
  • 作者:【美】 戈雷利克 / 【美】 歐日沃爾德
  • ISBN:9787115454898 
  • 出版社:人民郵電出版社
出版信息,內容簡介,作者簡介,目錄,

出版信息

作者:【美】 戈雷利克 (Micha Gorelick)/【美】 歐日沃爾德(Ian Ozsvald)
出版社:人民郵電出版社
出版年:2017-7-1
頁數:352
定價:79
裝幀:平裝
ISBN:9787115454898

內容簡介

本書共有12章,圍繞如何進行代碼最佳化和加快實際套用的運行速度進行詳細講解。本書主要包含以下主題:計算機內部結構的背景知識、列表和元組、字典和集合、疊代器和生成器、矩陣和矢量計算、並發、集群和工作佇列等。最後,通過一系列真實案例展現了在套用場景中需要注意的問題。
本書適合初級和中級Python程式設計師、有一定Python語言基礎想要得到進階和提高的讀者閱讀。

作者簡介

戈雷利克 (Micha Gorelick)在bitly公司從事與數據打交道的工作,並負責建立了快速前進實驗室(Fast Forward Labs),研究從機器學習到高性能流算法領域的問題。
歐日沃爾德(Ian Ozsvald)是ModelInsight.io的數據科學家和教師,有著超過十年的Python經驗。他在PyCon和PyData會議上教授Python編程,這幾年一直在英國從事關於數據科學和高性能計算方面的諮詢工作。

目錄

目錄
第1章 理解高性能Python 1
1.1 基本的計算機系統 1
1.1.1 計算單元 2
1.1.2 存儲單元 5
1.1.3 通信層 6
1.2 將基本的元素組裝到一起 8
1.3 為什麼使用Python 12
第2章 通過性能分析找到瓶頸 15
2.1 高效地分析性能 16
2.2 Julia集合的介紹 17
2.3 計算完整的Julia集合 20
2.4 計時的簡單方法——列印和修飾 24
2.5 用UNIX的time命令進行簡單的計時 27
2.6 使用cProfile模組 28
2.7 用runsnakerun對cProfile的輸出進行可視化 33
2.8 用line_profiler進行逐行分析 34
2.9 用memory_profiler診斷記憶體的用量 39
2.10 用heapy調查堆上的對象 45
2.11 用dowser實時畫出變數的實例 47
2.12 用dis模組檢查CPython位元組碼 49
2.13 在最佳化期間進行單元測試保持代碼的正確性 53
2.14 確保性能分析成功的策略 56
2.15 小結 57
第3章 列表和元組 58
3.1 一個更有效的搜尋 61
3.2 列表和元組 63
3.2.1 動態數組:列表 64
3.2.2 靜態數組:元組 67
3.3 小結 68
第4章 字典和集合 69
4.1 字典和集合如何工作 72
4.1.1 插入和獲取 73
4.1.2 刪除 76
4.1.3 改變大小 76
4.1.4 散列函式和熵 76
4.2 字典和命名空間 80
4.3 小結 83
第5章 疊代器和生成器 84
5.1 無窮數列的疊代器 87
5.2 生成器的延遲估值 89
5.3 小結 93
第6章 矩陣和矢量計算 94
6.1 問題介紹 95
6.2 Python列表還不夠嗎 99
6.3 記憶體碎片 103
6.3.1 理解perf 105
6.3.2 根據perf輸出做出抉擇 106
6.3.3 使用numpy 107
6.4 用numpy解決擴散問題 110
6.4.1 記憶體分配和就地操作 113
6.4.2 選擇最佳化點:找到需要被修正的地方 116
6.5 numexpr:讓就地操作更快更簡單 120
6.6 告誡故事:驗證你的“最佳化”(scipy) 121
6.7 小結 123
第7章 編譯成C 126
7.1 可能獲得哪種類型的速度提升 127
7.2 JIT和AOT編譯器的對比 129
7.3 為什麼類型檢查有助代碼更快運行 129
7.4 使用C編譯器 130
7.5 複習Julia集的例子 131
7.6 Cython 131
7.6.1 使用Cython編譯純Python版本 132
7.6.2 Cython註解來分析代碼塊 134
7.6.3 增加一些類型註解 136
7.7 Shed Skin 140
7.7.1 構建擴展模組 141
7.7.2 記憶體拷貝的開銷 144
7.8 Cython和numpy 144
7.9 Numba 148
7.10 Pythran 149
7.11 PyPy 151
7.11.1 垃圾收集的差異 152
7.11.2 運行PyPy並安裝模組 152
7.12 什麼時候使用每種工具 154
7.12.1 其他即將出現的項目 155
7.12.2 一個圖像處理單元(GPU)的注意點 156
7.12.3 一個對未來編譯器項目的展望 157
7.13 外部函式接口 157
7.13.1 ctypes 158
7.13.2 cffi 160
7.13.3 f2py 163
7.13.4 CPython模組 166
7.14 小結 170
第8章 並發 171
8.1 異步編程介紹 172
8.2 串列爬蟲 175
8.3 gevent 177
8.4 tornado 182
8.5 AsyncIO 185
8.6 資料庫的例子 188
8.7 小結 191
第9章 multiprocessing模組 193
9.1 multiprocessing模組綜述 196
9.2 使用蒙特卡羅方法來估算Pi 198
9.3 使用多進程和多執行緒來估算Pi 199
9.3.1 使用Python對象 200
9.3.2 並行系統中的隨機數 207
9.3.3 使用numpy 207
9.4 尋找素數 210
9.5 使用進程間通信來驗證素數 221
9.5.1 串列解決方案 225
9.5.2 Naïve Pool解決方案 225
9.5.3 Less Naïve Pool解決方案 226
9.5.4 使用Manager.Value作為一個標記 227
9.5.5 使用Redis作為一個標記 229
9.5.6 使用RawValue作為一個標記 232
9.5.7 使用mmap作為一個標記 232
9.5.8 使用mmap作為一個標記的終極效果 234
9.6 用multiprocessing來共享numpy數據 236
9.7 同步檔案和變數訪問 243
9.7.1 檔案鎖 243
9.7.2 給Value加鎖 247
9.8 小結 249
第10章 集群和工作佇列 251
10.1 集群的益處 252
10.2 集群的缺陷 253
10.2.1 糟糕的集群升級策略造成華爾街損失4.62億美元 254
10.2.2 Skype的24小時全球中斷 255
10.3 通用的集群設計 255
10.4 怎樣啟動一個集群化的解決方案 256
10.5 使用集群時避免痛苦的方法 257
10.6 三個集群化解決方案 258
10.6.1 為簡單的本地集群使用Parallel Python模組 259
10.6.2 使用IPython Parallel來支持研究 260
10.7 為魯棒生產集群的NSQ 265
10.7.1 佇列 265
10.7.2 發布者/訂閱者 266
10.7.3 分散式素數計算器 268
10.8 看一下其他的集群化工具 271
10.9 小結 272
第11章 使用更少的RAM 273
11.1 基礎類型的對象開銷高 274
11.2 理解集合中的RAM使用 278
11.3 位元組和Unicode的對比 280
11.4 高效地在RAM中存儲許多文本 281
11.5 使用更少RAM的竅門 290
11.6 機率數據結構 291
11.6.1 使用1位元組的Morris計數器來做近似計數 292
11.6.2 K最小值 295
11.6.3 布隆過濾器 298
11.6.4 LogLog計數器 303
11.6.5 真實世界的例子 307
第12章 現場教訓 311
12.1 自適應實驗室(Adaptive Lab)的社交媒體分析(SoMA) 311
12.1.1 自適應實驗室(Adaptive Lab)使用的Python 312
12.1.2 SoMA的設計 312
12.1.3 我們的開發方法論 313
12.1.4 維護SoMA 313
12.1.5 對工程師同行的建議 313
12.2 使用RadimRehurek.com讓深度學習飛翔 314
12.2.1 最佳時機 314
12.2.2 最佳化方面的教訓 316
12.2.3 總結 318
12.3 在Lyst.com的大規模產品化的機器學習 318
12.3.1 Python在Lyst的地位 319
12.3.2 集群設計 319
12.3.3 在快速前進的初創公司中做代碼評估 319
12.3.4 構建推薦引擎 319
12.3.5 報告和監控 320
12.3.6 一些建議 320
12.4 在Smesh的大規模社交媒體分析 321
12.4.1 Python在Smesh中的角色 321
12.4.2 平台 321
12.4.3 高性能的實時字元串匹配 322
12.4.4 報告、監控、調試和部署 323
12.5 PyPy促成了成功的Web和數據處理系統 324
12.5.1 先決條件 325
12.5.2 資料庫 325
12.5.3 Web套用 326
12.5.4 OCR和翻譯 326
12.5.5 任務分發和工作者 327
12.5.6 結論 327
12.6 在Lanyrd.com中的任務佇列 327
12.6.1 Python在Lanyrd中的角色 328
12.6.2 使任務佇列變高性能 328
12.6.3 報告、監控、調試和部署 328
12.6.4 對開發者同行的建議 329

相關詞條

熱門詞條

聯絡我們