Python高性能編程(第2版)

《Python高性能編程(第2版)》是2023年人民郵電出版社出版的圖書。

基本介紹

  • 中文名:Python高性能編程(第2版)
  • 作者:[美]米夏·戈雷利克、[美] 伊恩·歐日沃爾德
  • 出版時間:2023年8月
  • 出版社:人民郵電出版社
  • ISBN:9787115599476
  • 裝幀:平裝
內容簡介,圖書目錄,

內容簡介

Python語言是一種腳本語言,套用領域非常廣泛,包括數據分析、自然語言處理、機器學習、科學計算、推薦系統構建等。
本書共有12章,圍繞如何進行代碼最佳化和加快實際應用程式的運行速度進行講解,還介紹了如何解決CPU密集型問題、數據傳輸和記憶體密集型問題,如何通過移動數據、PyPy即時編譯器和異步I/O提升性能。本書主要包括以下內容:計算機原理、列表和元組、字典和集合、疊代器、Python模組、並發性、集群計算等。最後,本書通過一系列真實案例展現了在套用場景中使用Python時需要注意的問題。

圖書目錄

前言 xvii
第 1章 理解高性能Python 1
1.1 基本的計算機系統 1
1.1.1 計算單元 2
1.1.2 存儲單元 4
1.1.3 通信層 6
1.2 綜合考慮 8
1.3 為何使用Python 11
1.4 如何成為高性能程式設計師 13
1.4.1 最佳實踐 14
1.4.2 對Notebook最佳實踐的思考 15
1.4.3 重新發現工作的樂趣 16
第 2章 通過剖析找出瓶頸 17
2.1 高效地剖析 18
2.2 朱利亞集合簡介 19
2.3 計算整個朱利亞集合 22
2.4 簡單計時方法—print語句和裝飾器 25
2.5 使用UNIX命令time的簡單計時 27
2.6 使用模組cProfile 29
2.7 使用SnakeViz可視化cProfile的輸出 34
2.8 使用line_profiler逐行剖析 35
2.9 使用memory_profiler診斷記憶體占用情況 40
2.10 使用PySpy查看既有進程 47
2.11 位元組碼:幕後發生的情況 48
2.11.1 使用模組dis查看CPython位元組碼 48
2.11.2 複雜度隨方法而異 50
2.12 最佳化期間使用單元測試確保代碼正確 52
2.13 確保代碼剖析成功的策略 55
2.14 小結 56
第3章 列表和元組 57
3.1 更高效的查找方式 60
3.2 比較列表和元組 62
3.2.1 作為動態數組的列表 63
3.2.2 作為靜態數組的元組 66
3.3 小結 67
第4章 字典和集合 69
4.1 字典和集合的工作原理 72
4.1.1 插入和檢索 72
4.1.2 刪除 76
4.1.3 調整長度 76
4.1.4 散列函式和熵 76
4.2 字典和名稱空間 80
4.3 小結 83
第5章 疊代器和生成器 84
5.1 無窮數列疊代器 88
5.2 延遲執行生成器 89
5.3 小結 93
第6章 矩陣和向量計算 94
6.1 問題簡介 95
6.2 Python列表不夠好嗎 99
6.3 記憶體碎片 104
6.3.1 理解perf 106
6.3.2 根據perf的輸出做決策 108
6.3.3 進入numpy 108
6.4 使用numpy解決擴散問題 111
6.4.1 記憶體分配和就地操作 114
6.4.2 有選擇地最佳化:找出需要修復的地方 118
6.5 numexpr:讓你能夠更快、更輕鬆地執行就地操作 121
6.6 警示故事:對最佳化進行驗證(scipy) 122
6.7 從矩陣最佳化獲得的經驗教訓 124
6.8 Pandas 126
6.8.1 Pandas的內部模型 127
6.8.2 將函式套用於多行數據 128
6.8.3 根據部分結果而不是使用拼接來創建DataFrame和Series 135
6.8.4 有多種解決問題的方式(而且可能有更快的方式) 136
6.8.5 Pandas高效開發建議 137
6.9 小結 138
第7章 編譯成C代碼 139
7.1 速度提升方法 140
7.2 JIT編譯器和AOT編譯器 141
7.3 為何類型信息有助於提高代碼運行速度 142
7.4 使用C語言編譯器 143
7.5 回顧朱利亞集合示例 143
7.6 Cython 144
7.7 pyximport 146
7.7.1 使用Cython標註選項來分析代碼塊 146
7.7.2 添加類型標註 149
7.8 Cython和numpy 152
7.9 Numba 156
7.10 PyPy 159
7.10.1 垃圾收集方面的差異 160
7.10.2 運行PyPy及安裝模組 160
7.11 速度提升小結 162
7.12 各種技術的適用場景 163
7.13 圖形處理單元 165
7.13.1 動態圖:PyTorch 165
7.13.2 GPU基本剖析 168
7.13.3 GPU性能考慮因素 169
7.13.4 在什麼情況下使用GPU 170
7.14 語言互動接口 172
7.14.1 ctypes 173
7.14.2 cffi 175
7.14.3 f2py 177
7.14.4 CPython模組 180
7.15 小結 184
第8章 異步I/O 186
8.1 異步編程簡介 187
8.2 async/await的工作原理 190
8.2.1 串列爬蟲 191
8.2.2 gevent 192
8.2.3 tornado 196
8.2.4 aiohttp 199
8.3 兼具CPU密集型和I/O密集型的問題 202
8.3.1 串列版 203
8.3.2 分批處理結果 204
8.3.3 完全異步 207
8.4 小結 211
第9章 模組multiprocessing 213
9.1 模組multiprocessing概述 216
9.2 使用蒙特卡羅方法估算圓周率 217
9.3 使用進程和執行緒估算圓周率 219
9.3.1 使用Python對象 219
9.3.2 使用Joblib而不是multiprocessing 225
9.3.3 並行系統中的隨機數 229
9.3.4 使用numpy 230
9.4 查找素數 232
9.5 使用進程間通信驗證素數 242
9.5.1 串列解決方案 247
9.5.2 樸素進程池解決方案 247
9.5.3 改進的樸素進程池解決方案 248
9.5.4 將Manager.Value用作標誌 249
9.5.5 將Redis用作標誌 251
9.5.6 將RawValue用作標誌 253
9.5.7 將mmap用作標誌 254
9.5.8 將mmap用作標誌(終極版) 255
9.6 使用multiprocessing共享numpy數據 257
9.7 同步檔案和變數訪問 263
9.7.1 鎖定檔案 263
9.7.2 鎖定值 267
9.8 小結 269
第 10章 集群和作業佇列 271
10.1 集群的優點 272
10.2 集群的缺點 273
10.2.1 糟糕的集群升級策略讓華爾街大牛損失4.62億美元 274
10.2.2 Skype全球24小時中斷服務 274
10.3 常見的集群設計 275
10.4 如何啟動集群解決方案 276
10.5 使用集群時如何避免麻煩 276
10.6 兩種集群解決方案 277
10.6.1 使用IPython Parallel為研究工作提供支持 278
10.6.2 使用Dask並行化Pandas 281
10.7 使用NSQ打造健壯的生產集群 284
10.7.1 佇列 284
10.7.2 發布者/訂閱者 285
10.7.3 分散式素數計算 287
10.8 其他集群工具 291
10.9 Docker 292
10.9.1 Docker的性能 292
10.9.2 Docker的優點 295
10.10 小結 296
第 11章 減少記憶體占用量 297
11.1 基本類型對象的開銷很高 298
11.1.1 模組array可高效地存儲大量的基本類型對象 299
11.1.2 使用NumExpr減少NumPy占用的記憶體量 302
11.2 理解集合占用的記憶體 305
11.3 比較位元組和Unicode 307
11.4 在記憶體中高效地存儲大量文本 307
11.5 使用scikit-learn FeatureHasher進行文本建模 315
11.6 DictVectorizer和FeatureHasher簡介 316
11.7 SciPy稀疏矩陣 319
11.8 減少記憶體占用量的技巧 322
11.9 機率數據結構 322
11.9.1 使用1位元組的莫里斯計數器實現非常接近的計數 323
11.9.2 K最小值 326
11.9.3 布隆過濾器 329
11.9.4 LogLog計數器 335
11.9.5 實例 339
第 12章 實戰經驗教訓 342
12.1 使用特徵引擎簡化特徵工程流水線 342
12.1.1 機器學習中的特徵工程 343
12.1.2 艱巨的特徵工程流水線部署任務 343
12.1.3 利用開源Python庫 344
12.1.4 使用Feature-engine簡化特徵工程流水線的構建和部署工作 344
12.1.5 推廣新的開源包 345
12.1.6 開發和維護開源庫及鼓勵積極投稿 346
12.2 表現出色的數據科學團隊 347
12.2.1 需要多長時間 347
12.2.2 探索和規劃 348
12.2.3 管理預期和交付 349
12.3 Numba 350
12.3.1 一個簡單的示例 350
12.3.2 最佳實踐和建議 352
12.3.3 尋求幫助 355
12.4 最佳化和思維 356
12.5 Adaptive Lab的社交媒體分析(2014) 358
12.5.1 Adaptive Lab的Python使用情況 358
12.5.2 SoMA的設計 358
12.5.3 開發方法 359
12.5.4 維護SoMA 359
12.5.5 給同行的建議 360
12.6 RadimRehurek網站如何讓深度學習快步如飛(2014) 360
12.6.1 管用的策略 360
12.6.2 最佳化方面的經驗教訓 362
12.6.3 結語 364
12.7 Lyst網站可用於生產環境的大規模機器學習(2014) 364
12.7.1 集群設計 364
12.7.2 發展迅猛的初創公司中的代碼疊代 365
12.7.3 構建推薦引擎 365
12.7.4 報告和監控 365
12.7.5 一些建議 366
12.8 Smesh的大規模社交媒體分析(2014) 366
12.8.1 Python在Smesh中扮演的角色 366
12.8.2 平台 367
12.8.3 實時高性能字元串匹配 367
12.8.4 報告、監控、調試和部署 368
12.9 使用PyPy成功地實現Web和數據處理系統(2014) 369
12.9.1 使用的工具 370
12.9.2 資料庫 370
12.9.3 Web套用 371
12.9.4 OCR和翻譯 371
12.9.5 任務分配和任務佇列 371
12.9.6 結語 372
12.10 Lanyrd的任務佇列(2014) 372
12.10.1 Python在Lanyrd扮演的角色 372
12.10.2 讓任務佇列表現出色 373
12.10.3 報告、監控、調試和部署 373
12.10.4 給同行的建議 373

相關詞條

熱門詞條

聯絡我們