Python 問世至今已經三十年左右了,但其僅在過去幾年人氣迅速飆升超過了除 java 和 C 以外的其他語言。總的來說,Python 已經成為教學、學習編程和軟體開發的優秀起點,而且其可以成為任何技術棧中有價值的一部分。 另外大家要註意:光理論是不夠的。這裡順便總大家一套2020最新python入 ...
Python 問世至今已經三十年左右了,但其僅在過去幾年人氣迅速飆升超過了除 java 和 C 以外的其他語言。總的來說,Python 已經成為教學、學習編程和軟體開發的優秀起點,而且其可以成為任何技術棧中有價值的一部分。
另外大家要註意:光理論是不夠的。這裡順便總大家一套2020最新python入門到高級項目實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,還可以跟老司機交流討教!
不幸的是,這樣的流行程度也會暴露 Python 的缺點,最顯著且眾所周知的缺點是這三個:運算性能、打包及可執行程式的生成、項目管理
雖然這三個缺點都不是非常致命,但是和其他處於上升通道的語言如 Julia、Nim、Rust 和 Go 相比,Python 的劣勢將越來越明顯。
下麵給大家講講 Python 程式員面臨的這三個缺點,以及 Python 與其第三方工具開發人員提出的解決這些缺點的方法。
缺點一:Python 多線程和速度
Python 整體性能緩慢,有限的線程和多處理能力是其未來發展的主要障礙。
Python 長期以來一直重視編程的易用性而不是運行時的速度。當通過使用 C 或 C++ 編寫的高速外部庫(如 Numpy 和 Numba)在 Python 中完成如此多的性能密集型任務時,你會發現 Python 重視編程的易用性也是一種不錯的選擇。但是儘管如此,Python 的開箱即用的性能速度依然落後於其他語言,比如說具有同樣簡單語法的 Nim 和 Julia,卻可以被編譯為機器代碼,具有更高的性能優勢。
Python 無法全面利用多核處理器是其長久以來的問題,它確實具有線程功能,但它的線程功能是局限於單個核心的。雖然 Python 可以使用多進程,但是調度和同步這些子進程的結果並不總是有效的
解決方案
目前沒有單一,自上而下的整體解決方案來解決 Python 的性能問題,不過我們有一系列加速 Python 的舉措。比如說:
- 使用 PyPy 解釋器替代官方解釋器,PyPy 能夠將 Python 代碼編譯成機器代碼,它在僅僅使用 Python 自帶的模塊的代碼中效果最好,不過現在也可以適用於如 numpy 這樣的流行的庫,但是其始終只適合於長期運行的服務,而不是能打包帶走的應用程式。
- Cython,Cython 能將 Python+C 混合編碼的.pyx 腳本轉化為 C 代碼。該項目最初是為科學和數值計算而設計的,但它可以在大多數情況下使用。
- Numba,Numba 和 Cython 類似,主要用於科學計算。
- Mypyc,是現在仍在開發的項目,它會將用 mypyc 類型裝飾器裝飾的代碼轉化為 C.
- 優化的 Python 發行版,比如英特爾針對特殊的處理器和其特殊的數學運算所開發的專門編譯版本。不過儘管它能夠顯著加快部分運算速度,但不能加快整體的運算速度。
如果你是高手,你還能嘗試擺脫一下 GIL(全局解釋器鎖),之所以 Python 的多線程是假的,就是因為 GIL 的存在:它用來保證 Python 同時只能有一個線程運行。因此從理論上來講,如果你擺脫了 GIL,就能進行多線程運算,可以提高性能。
還有一個正在進行的項目能夠解決許多速度提升的問題,即重構 Python 內部 C 介面的實現,一個不混亂的介面可以使得許多性能的改進成為可能。
缺點二:Python 打包和可執行文件
即使在 Python 誕生 30 年後,Python 依然沒有很好的方法來生成可執行文件(exe 程式等)
我們只能通過第三方工具解決。而且用起來比較麻煩。
解決方案
- pyinstaller 可以打包使用許多如 numpy 這樣的庫,但是它必須和這些庫保持版本一致,這可太難受了。而且它生成的程式比較大,因為把 import 語句里所有的內容都封裝在一起了。
- 還有種方法也是正在研究中,那就是 PyOxidizer 項目使用 Rust 語言生成嵌入 Python 的二進位文件,不過距離成為真正的解決方案還有一段發展路程要走。
缺點三:Python 包管理、項目管理
當你想將一個本地比較複雜的 Python 工程移植到伺服器上的時候,你就知道 Python 項目管理是有多蛋疼了
你需要不斷地安裝項目依賴,依賴的依賴可能還有依賴,就像俄羅斯俄羅斯套娃一樣,恨不得直接把鍵盤吃了。
解決方案
- 這種問題,當然需要 Python 的開發團隊出手了,需要他們提供一套優雅的遷移工具。
- 不過他們已經朝這個方向前進幾步了,根據 PEP 518,Python 的構建依賴項被合併為 pyproject.toml 文件格式(取代了 setup.py, requirements.txt, setup.cfg, MANIFEST.in 以及最新加入的 Pipfile)
- 當然也不是沒有辦法,使用 poetry 賴管理工具,它能夠很方便地將你所需要的依賴打包在一起。
最後註意註意:光理論是不夠的。這裡順便總大家一套2020最新python入門到高級項目實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,還可以跟老司機交流討教!本文的文字及圖片來源於網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。