中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

實現更快的python核心編碼技巧有哪些

發布時間:2021-11-22 14:32:03 來源:億速云 閱讀:151 作者:iii 欄目:編程語言

本篇內容介紹了“實現更快的python核心編碼技巧有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!


1。Memoize(緩存)重復使用的數據

當你能做到一次并保存結果時,千萬不要做一千次工作。如果有一個經常調用的函數返回可預測的結果,那么python為您提供了將結果緩存到內存中的選項。返回相同結果的后續調用幾乎會立即返回。

各種各樣的例子展示了如何做到這一點;我最喜歡的記憶幾乎是最少的。python的一個本機庫functools具有@functools.lru緩存裝飾器,它緩存最近對函數的n個調用。當正在緩存的值發生變化,但在特定的時間窗口內是相對靜態的時,這很方便。一天中最新使用的項目列表就是一個很好的例子。

2。將數學移動到numpy

如果您正在進行基于矩陣或數組的數學運算,并且不希望Python解釋器妨礙您的工作,請使用numpy。通過利用C庫進行繁重的工作,numpy提供了比本機python更快的數組處理。它還比Python的內置數據結構更有效地存儲數字數據。

相對來說,非異類的數學也可以被numpy大大加快。該包為許多常見的python數學操作(如min和max)提供了替換,這些操作的速度比原來的python快很多倍。

numpy的另一個好處是更有效地使用大型對象的內存,比如擁有數百萬個項目的列表。一般來說,像numpy中那樣的大型對象如果用傳統的python來表示,則占用大約四分之一的內存。請注意,它有助于從作業的正確數據結構開始,即優化本身。

重寫python算法以使用numpy需要一些工作,因為數組對象需要使用numpy的語法聲明。但是numpy在實際的數學運算中使用了python現有的習語(+、-,等等),所以從長遠來看,切換到numpy并不會太令人迷惑。

3。使用C庫

numpy使用C語言編寫的庫是一種很好的模擬策略。如果有一個現有的C庫可以滿足您的需要,那么Python及其生態系統提供了幾個選項來連接到該庫并利用其速度。

最常見的方法是使用Python的CTypes庫。因為ctypes與其他python應用程序(和運行時)廣泛兼容,所以它是最佳的開始位置,但它遠不是鎮上唯一的游戲。cffi項目為c.cython提供了一個更優雅的接口(見下文),也可以用來包裝外部庫,盡管代價是必須學習cython的標記。

4。與多處理并行

傳統的python應用程序——那些在cpython中實現的應用程序——一次只執行一個線程,以避免在使用多個線程時出現狀態問題。這是臭名昭著的全球口譯員鎖(gil)。它的存在有充分的理由,這并沒有使它變得更加華麗。

隨著時間的推移,gil的效率顯著提高(運行python 3而不是python 2的另一個原因),但核心問題仍然存在。一個cpython應用程序可以是多線程的,但是cpython不允許這些線程在多個核心上并行運行。

為了解決這個問題,python提供了多處理模塊來在不同的核心上運行python解釋器的多個實例。狀態可以通過共享內存或服務器進程來共享,數據可以通過隊列或管道在進程實例之間傳遞。

您仍然需要在進程之間手動管理狀態。另外,在啟動多個Python實例并在其中傳遞對象的過程中,不會有太多的開銷。但是對于長期運行的進程來說,多處理庫是非常有用的,因為它可以從跨核心的并行性中獲益。

另外,使用C庫的python模塊和包(如numpy)完全避免使用gil。這也是他們被推薦提速的另一個原因。

5。知道你的庫在做什么

簡單地輸入XYZ并利用無數其他程序員的工作是多么方便!但是您需要知道,第三方庫可以改變應用程序的性能,而不是總是為了更好。

有時,這以明顯的方式表現出來,例如當來自特定庫的模塊構成瓶頸時。(再次強調,剖析會有所幫助。)有時情況不那么明顯。示例:Pyglet是一個用于創建窗口化圖形應用程序的簡便庫,它自動啟用調試模式,這會顯著影響性能,直到顯式禁用它為止。除非您閱讀文檔,否則您可能永遠不會意識到這一點。閱讀并被告知。

6。注意平臺

python運行跨平臺,但這并不意味著每個操作系統(windows、linux、os x)的特性都是在python下抽象出來的。大多數時候,這意味著要了解平臺的具體情況,比如路徑命名約定,對于這些約定,有助手函數。

但在性能方面,了解平臺差異也很重要。例如,在Windows上,需要計時器精度小于15毫秒(例如,對于多媒體)的python腳本將需要使用Windows API調用來訪問高分辨率計時器或提高計時器分辨率。

7。與PyPy同行

cpython是Python最常用的實現,它將兼容性優先于原始速度。對于那些想把速度放在首位的程序員來說,有pypy,一個配備了jit編譯器的python實現來加速代碼執行。

因為pypy是作為cpython的替代品而設計的,所以它是快速提高性能的最簡單方法之一。許多常見的python應用程序將在pypy上運行。一般來說,應用程序越依賴于“普通”的python,就越有可能在pypy上運行而不進行修改。

然而,充分利用PYPY可能需要測試和研究。您會發現長時間運行的應用程序從Pypy獲得最大的性能收益,因為編譯器會分析一段時間后的執行情況。對于運行和退出的短腳本,您最好使用cpython,因為性能提升不足以克服JIT的開銷。

請注意,pypy對python 3的支持仍然落后于幾個版本;它目前支持python 3.2.5。使用最新的python特性(如async和await-co例程)的代碼將無法工作。最后,使用ctypes的python應用程序的行為可能并不總是如預期的那樣。如果您正在編寫可能同時在pypy和cpython上運行的東西,那么為每個解釋器分別處理用例可能是有意義的。

其他通過抖動加速python的實驗仍在取得成果。其中包括一個微軟項目pyjion,它為cpython提供了一個JIT接口。微軟提供了自己的JIT作為概念證明。

8。升級至python 3

如果您使用的是python 2.x,并且沒有覆蓋的原因(比如不兼容的模塊)來堅持使用它,那么您應該跳到python 3。

除了python 3作為語言的未來,python 3中還提供了許多構造和優化,而python 2.x中沒有這些構造和優化。例如,python 3.5通過將async和wait關鍵字作為語言語法的一部分來減少異步編程的麻煩。python 3.2對全局解釋器鎖進行了重大升級,顯著改進了python處理多個線程的方式。

“實現更快的python核心編碼技巧有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

舞阳县| 漳浦县| 资溪县| 尖扎县| 达孜县| 米易县| 六安市| 土默特左旗| 南投县| 烟台市| 马公市| 肇州县| 自贡市| 定结县| 娄烦县| 安徽省| 余江县| 兴安县| 西充县| 临夏市| 富民县| 曲松县| 威远县| 孝感市| 连江县| 石狮市| 河北区| 含山县| 扬中市| 台湾省| 康定县| 淮南市| 永善县| 祁门县| 渭南市| 永定县| 伊宁县| 德化县| 荔波县| 乐都县| 盱眙县|