Python效能分析與優化(譯者序)
從狹義相對論的角度看,速度最快、規模最大的平行計算方式是太陽照耀地球。每時每刻,陽光都會離開太陽表面,以大約30萬千米/秒的速度,經過8分17秒到達地球表面。太陽的計算方式很簡單,一視同仁,普照大地,並行(parallel)照耀每一個物件,誰也不會多得一米陽光。地球上的每個人都可看成享受陽光資源的獨立程式(process),人們平時處理自己的任務,經歷著各自的生命週期,彼此間有時也會通訊(程式間通訊,IPC)。由於太陽資源豐富,可以不計得失,她也許從來不覺得自己的光具有波粒二象性,也沒覺得平行計算的效率高。
但是,人不是太陽,每個人在一生中時刻面對著諸多問題。“人無遠慮,必有近憂”,本質上皆為時間與空間的稀缺問題,這與計算機的多工處理問題一致。完成任務之前,需要精打細算,以期充分利用資源,儘可能地多快好省,實現高效執行。對於單任務,人們會努力提升自己的能力,並藉助高效能的工具,提高做事的效率,從內部不斷優化自己。對於多個簡單任務,可以完成一個任務再去完成另一個任務,就像for
迴圈處理方式。然而,“好漢難敵四手”,個人的力量總是有限的,所以時間緊迫、任務艱鉅時,團隊的力量(多程式)不可或缺。有時,在處理沒有共同資源需求的多個任務時,可以多人同時作業,並行處理,提高效率。處理有共同資源需求的多個任務時,我們會為每個人設定不同的階段性目標,在這段時間做點任務A,在那段時間做點任務B,也就是多執行緒的併發(concurrency)處理;這樣,一段時間後,兩個任務就都可以完成。然而,多程式與多執行緒,究竟哪種方式效率高、效果好,需要根據實際情況決定。
計算機多工處理的理論,與上述情景類似。大師們已經將這些資源配置方法抽象成完整的理論,不僅適用於計算機程式語言,對提高個人素質和改善團隊合作方式也大有裨益。眾所周知,Python語言簡潔優雅的特點,使其生產效率大幅提升,然而在面對海量的資料處理、文字分析、伺服器響應時,其效能瓶頸也十分明顯。但是,Python社群一直在努力,從語言自身的特性到計算機優化理論,特別是多工處理(並行、併發、分散式)等方面,不斷地改善Python的效能。本書即是社群對Python效能分析與優化實踐的系統性總結之一。
本書內容豐富,淺顯易懂,適合有Python基礎的讀者閱讀。作者從演算法效能分析理論開始,首先介紹主流的Python效能分析工具,包括cProfile效能分析器、line_profiler+kernprof效能分析工具、KCacheGrind+pyprof2calltree、RunSnakeRun視覺化效能分析工具,幫助讀者發現程式的效能瓶頸。緊接著,將通用效能優化方法與Python語言結構緊密結合起來,優化程式的效能,介紹了函式值快取、列表生成器、ctypes和字串優化等技巧。之後,介紹了Python多執行緒與多程式的多工處理方法,並對PyPy(JIT編譯器)與Cython(引入C語言型別)的用法與特點進行了深入分析。另外,針對Python在資料分析領域的重要地位,作者還專門介紹了高效能的資料處理程式庫,如Numba、Parakeet和pandas。最後,作者通過一個Python網路爬蟲案例,將前面介紹的效能分析與優化方法結合起來,不斷地改善程式的效能,對比效能優化的效果。
優化Python也是需要成本的。寫Python總是很happy,因為在普通的業務場景中,Python並不慢,再結合成熟的科學計算生態環境,問題大都可以輕鬆解決。雖然Python的效能分析與優化方法都很簡單,但是優化也是需要花費時間的,所以大規模的效能優化需要面對特定的業務場景才有意義,正如不是所有人每天都需要跑100米衝刺,亦如Python的發明者Guido van Rossum所說,“……對絕大多數事情而言,語言效能並不重要……”(...for most of what you're doing, the speed of the language is irrelevant...)。假如你的Python程式總是需要優化,那麼高效能部分程式碼可以考慮使用新語言實現,參考Google與Dropbox的發展軌跡。如果你有時間、想優化,那就動手吧,本書可以給你一些指導。不過,開源專案的發展速度不是書本可以跟上的,所以要想了解最新的進展,需要主動關注相關工具的官方網站或GitHub。書籍能夠提供的是基礎性、系統化的指導,知識可能過時,但方向不會改變。
Python生態系統的效能與時俱進。隨著資料獲取成本與雲端計算資源成本的不斷降低,人們越來越容易獲取強大的計算資源(如亞馬遜AWS、微軟Azure、谷歌雲端計算平臺)。PEP不斷地引入優質方案,增強Python的效能,Spark(支援Python)、dask、IPython的ipyparallel等平行計算框架也在快速發展,Python的生態系統效能不斷地優化,精彩的故事正在進行,讓我們共同努力吧(Let's do more of this)。
簡單,所以持久。
——譯者陶俊傑
相關文章
- Golang效能分析與優化Golang優化
- 效能分析優化的道與術優化
- sql語句執行順序與效能優化(1)SQL優化
- 06.python直譯器及效能優化Python優化
- 譯 者 序
- 前端效能優化 —— 前端效能分析前端優化
- python效能優化Python優化
- Python 效能優化Python優化
- 效能優化之html、css、js三者的載入順序優化HTMLCSSJS
- Python Django 效能測試與優化指南PythonDjango優化
- 急性者的效能優化優化
- Android效能優化之App應用啟動分析與優化Android優化APP
- 【譯】前端效能優化清單前端優化
- Android App效能優化[譯]AndroidAPP優化
- SQL效能優化案例分析SQL優化
- Web效能優化系列(1):Web效能優化分析Web優化
- Python 效能快速優化Python優化
- 譯者序、序、撰稿人
- 《系統化思維導論》譯者序
- TiDB 效能分析&效能調優&優化實踐大全TiDB優化
- python效能優化之函式執行時間分析Python優化函式
- Nginx安全優化與效能調優Nginx優化
- 六、Android效能優化之UI卡頓分析之渲染效能優化Android優化UI
- 前端工程與效能優化前端優化
- 【效能調優】效能測試、分析與調優基礎
- [譯] 拖放庫中 React 效能的優化React優化
- Web 效能優化:Preload與Prefetch的使用及在 Chrome 中的優先順序Web優化Chrome
- 從案例分析如何優化前端效能優化前端
- 前端效能常見優化點分析前端優化
- 《MySQL效能優化和高可用架構實踐》簡介與推薦序MySql優化架構
- PHP 7革新與效能優化PHP優化
- mysql效能優化-慢查詢分析、優化索引和配置MySql優化索引
- 後端編譯與優化後端編譯優化
- 程式分析與優化 - 6 迴圈優化優化
- 快速Python效能優化要點Python優化
- Python效能優化技巧總結Python優化
- 6個Python效能優化技巧Python優化
- Python 程式碼效能優化技巧Python優化