第 1 章 基準測試與剖析 1
1.1 設計應用程序 2
1.2 編寫測試和基準測試程序 7
1.3 使用pytest-benchmark 編寫更佳的測試和基準測試程序 10
1.4 使用cProfile 找出瓶頸 12
1.5 使用line_profiler 逐行進行剖析 16
1.6 優(yōu)化代碼 17
1.7 模塊dis 19
1.8 使用memory_profiler 剖析內存使用情況 19
1.9 小結 21
第 2 章 純粹的Python 優(yōu)化 22
2.1 有用的算法和數(shù)據(jù)結構 22
2.1.1 列表和雙端隊列 23
2.1.2 字典 25
2.1.3 集 28
2.1.4 堆 29
2.1.5 字典樹 30
2.2 緩存和memoization 32
2.3 推導和生成器 34
2.4 小結 36
第3 章 使用NumPy 和Pandas 快速執(zhí)行數(shù)組操作 37
3.1 NumPy 基礎 37
3.1.1 創(chuàng)建數(shù)組 38
3.1.2 訪問數(shù)組 39
3.1.3 廣播 43
3.1.4 數(shù)學運算 45
3.1.5 計算范數(shù) 46
3.2 使用NumPy 重寫粒子模擬器 47
3.3 使用numexpr zui大限度地提高性能 49
3.4 Pandas 51
3.4.1 Pandas 基礎 51
3.4.2 使用Pandas 執(zhí)行數(shù)據(jù)庫式操作 55
3.5 小結 59
第4 章 使用Cython 獲得C 語言性能 60
4.1 編譯Cython 擴展 60
4.2 添加靜態(tài)類型 62
4.2.1 變量 63
4.2.2 函數(shù) 64
4.2.3 類 65
4.3 共享聲明 66
4.4 使用數(shù)組 67
4.4.1 C 語言數(shù)組和指針 67
4.4.2 NumPy 數(shù)組 69
4.4.3 類型化內存視圖 70
4.5 使用Cython 編寫粒子模擬器 72
4.6 剖析Cython 代碼 75
4.7 在Jupyter 中使用Cython 78
4.8 小結 80
第5 章 探索編譯器 82
5.1 Numba 82
5.1.1 Numba 入門 83
5.1.2 類型特殊化 84
5.1.3 對象模式和原生模式 85
5.1.4 Numba 和NumPy 88
5.1.5 JIT 類 91
5.1.6 Numba 的局限性 94
5.2 PyPy 項目 95
5.2.1 安裝PyPy 95
5.2.2 在PyPy 中運行粒子模擬器 96
5.3 其他有趣的項目 97
5.4 小結 97
第6 章 實現(xiàn)并發(fā)性 98
6.1 異步編程 98
6.1.1 等待I/O 99
6.1.2 并發(fā) 99
6.1.3 回調函數(shù) 101
6.1.4 future 104
6.1.5 事件循環(huán) 105
6.2 asyncio 框架 108
6.2.1 協(xié)程 108
6.2.2 將阻塞代碼轉換為非阻塞代碼 111
6.3 響應式編程 113
6.3.1 被觀察者 113
6.3.2 很有用的運算符 115
6.3.3 hot 被觀察者和cold 被觀察者 118
6.3.4 打造CPU 監(jiān)視器 121
6.4 小結 123
第7 章 并行處理 124
7.1 并行編程簡介 124
7.2 使用多個進程 127
7.2.1 Process 和Pool 類 127
7.2.2 接口Executor 129
7.2.3 使用蒙特卡洛方法計算pi 的近似值 130
7.2.4 同步和鎖 132
7.3 使用OpenMP 編寫并行的Cython代碼 134
7.4 并行自動化 136
7.4.1 Theano 初步 137
7.4.2 Tensorflow 142
7.4.3 在GPU 中運行代碼 144
7.5 小結 146
第8 章 分布式處理 148
8.1 分布式計算簡介 148
8.2 Dask 151
8.2.1 有向無環(huán)圖 151
8.2.2 Dask 數(shù)組 152
8.2.3 Dask Bag 和DataFrame 154
8.2.4 Dask distributed 158
8.3 使用PySpark 161
8.3.1 搭建Spark 和PySpark 環(huán)境 161
8.3.2 Spark 架構 162
8.3.3 彈性分布式數(shù)據(jù)集 164
8.3.4 Spark DataFrame 168
8.4 使用mpi4py 執(zhí)行科學計算 169
8.5 小結 171
第9 章 高性能設計 173
9.1 選擇合適的策略 173
9.1.1 普通應用程序 174
9.1.2 數(shù)值計算代碼 174
9.1.3 大數(shù)據(jù) 176
9.2 組織代碼 176
9.3 隔離、虛擬環(huán)境和容器 178
9.3.1 使用conda 環(huán)境 178
9.3.2 虛擬化和容器 179
9.4 持續(xù)集成 183
9.5 小結 184