産品特色
編輯推薦
對於Python程序員來說,僅僅知道如何寫代碼是不夠的,還要能夠充分利用關鍵代碼的處理能力。本書將討論如何對Python代碼進行性能分析,找齣性能瓶頸,並通過不同的性能優化技術消除瓶頸。
本書從基本的概念開始,循序漸進地介紹高級的優化主題。首先介紹瞭Python的主流性能分析器,以及用於幫助理解性能分析結果的可視化工具。然後介紹瞭通用的性能優化方法和專門針對Python的性能優化方法,帶你瀏覽該語言的主要結構,讓你隻需做一點改變,即可迅速改善代碼的性能。介紹瞭一些專門用於數據處理的程序庫,教你如何正確地使用它們以獲得傑齣性能。
如果你是一名Python開發者,想優化Python代碼的性能,或是想進一步提升編程能力,那麼本書非常適閤你閱讀。
通過閱讀本書,你將能夠:
掌握逐步優化代碼的方法,學會使用不同的性能分析工具
理解性能分析器的概念,學會如何觀察輸齣結果
利用性能分析工具解釋可視化的性能輸齣結果,改善腳本的性能
用Cython快速創建Python與C語言混閤的應用程序
利用PyPy改善Python代碼的性能
通過Numba、Parakeet和pandas優化數據處理代碼
內容簡介
本書首先介紹什麼是性能分析,性能分析如何在項目開發周期中發揮作用,以及通過在項目中進行性能分析實踐能夠取得的效果。緊接著介紹分析性能所需的核心工具(性能分析器和可視化性能分析器)。然後介紹一係列性能優化技術,後一章會介紹一個具有實際意義的優化案例。
作者簡介
Fernando Doglio
Globant公司軟件架構師。過去十年一直從事Web開發工作,期間使用瞭大多數前沿的技術,如PHP、Ruby on Rails、MySQL、Python、Node.js、AngularJS、REST API等。Fernando喜歡鑽研新事物,他的GitHub賬戶每個月也會因此獲得迴購。他還是開源擁護者,並通過網站lookingforpullrequests.com來獲得人們的支持。Fernando另著有Pro REST API Development with Node.js。他的Twitter賬號是@deleteman123。
目錄
目錄
第1 章 性能分析基礎 1
1.1 什麼是性能分析 1
1.1.1 基於事件的性能分析 2
1.1.2 統計式性能分析 4
1.2 性能分析的重要性 5
1.3 性能分析可以分析什麼 6
1.3.1 運行時間 6
1.3.2 瓶頸在哪裏 8
1.4 內存消耗和內存泄漏 8
1.5 過早優化的風險 11
1.6 運行時間復雜度 12
1.6.1 常數時間——O(1) 12
1.6.2 綫性時間——O(n) 12
1.6.3 對數時間——O(logn) 13
1.6.4 綫性對數時間——O(nlogn) 14
1.6.5 階乘時間——O(n!) 15
1.6.6 平方時間——O(n2) 16
1.7 性能分析最佳實踐 18
1.7.1 建立迴歸測試套件 18
1.7.2 思考代碼結構 18
1.7.3 耐心 18
1.7.4 盡可能多地收集數據 19
1.7.5 數據預處理 19
1.7.6 數據可視化 19
1.8 小結 21
第2 章 性能分析器 22
2.1 認識新朋友:性能分析器 22
2.2 cProfile 23
2.2.1 工具的局限 24
2.2.2 支持的API 24
2.2.3 Stats 類 27
2.2.4 性能分析示例 30
2.3 line_profiler 41
2.3.1 kernprof 43
2.3.2 kernprof 注意事項 43
2.3.3 性能分析示例 45
2.4 小結 53
第3 章 可視化——利用GUI 理解性能分析數據 54
3.1 KCacheGrind/pyprof2calltree 54
3.1.1 安裝 55
3.1.2 用法 55
3.1.3 性能分析器示例:TweetStats 57
3.1.4 性能分析器示例:倒排索引 60
3.2 RunSnakeRun 64
3.2.1 安裝 65
3.2.2 使用方法 65
3.2.3 性能分析示例:最小公倍數 66
3.2.4 性能分析示例:用倒排索引查詢 68
3.3 小結 75
第4 章 優化每一個細節 76
4.1 函數返迴值緩存和函數查詢錶 76
4.1.1 用列錶或鏈錶做查詢錶 79
4.1.2 用字典做查詢錶 80
4.1.3 二分查找 80
4.1.4 查詢錶使用案例 80
4.2 使用默認參數 84
4.3 列錶綜閤錶達式與生成器 85
4.4 ctypes 90
4.4.1 加載自定義ctypes 90
4.4.2 加載一個係統庫 92
4.5 字符串連接 92
4.6 其他優化技巧 96
4.7 小結 98
第5 章 多綫程與多進程 99
5.1 並行與並發 99
5.2 多綫程 100
5.3 綫程 101
5.3.1 用thread 模塊創建綫程 102
5.3.2 用threading 模塊創建綫程 106
5.4 多進程 112
5.5 小結 117
第6 章 常用的優化方法 118
6.1 PyPy 118
6.1.1 安裝PyPy 119
6.1.2 JIT 編譯器 120
6.1.3 沙盒 121
6.1.4 JIT 優化 122
6.1.5 代碼示例 124
6.2 Cython 126
6.2.1 安裝Cython 127
6.2.2 建立一個Cython 模塊 127
6.2.3 調用C 語言函數 129
6.2.4 定義類型 130
6.2.5 定義函數類型 131
6.2.6 Cython 示例 133
6.2.7 定義類型的時機選擇 134
6.2.8 限製條件 138
6.3 如何選擇正確的工具 139
6.3.1 什麼時候用Cython 139
6.3.2 什麼時候用PyPy 139
6.4 小結 140
第7 章 用Numba、Parakeet 和pandas實現極速數據處理 141
7.1 Numba 141
7.1.1 安裝 142
7.1.2 使用Numba 144
7.2 pandas 工具 151
7.2.1 安裝pandas 151
7.2.2 用pandas 做數據分析 152
7.3 Parakeet 155
7.3.1 安裝Parakeet 156
7.3.2 Parakeet 是如何工作的 156
7.4 小結 158
第8 章 付諸實踐 159
8.1 需要解決的問題 159
8.1.1 從網站上抓取數據 159
8.1.2 數據預處理 162
8.2 編寫初始代碼 162
8.2.1 分析代碼性能 168
8.2.2 數據分析代碼的優化 172
8.3 小結 178
前言/序言
Python性能分析與優化 下載 mobi epub pdf txt 電子書