91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Python性能優化的方法路徑怎樣的

發布時間:2021-10-25 17:39:43 來源:億速云 閱讀:147 作者:柒染 欄目:編程語言

這篇文章將為大家詳細講解有關Python性能優化的方法路徑怎樣的,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

前言

Python作為程序語言最被人詬病的一點在于其性能。Python作為動態語言,性能并不是它的優勢,但很多時候實際也不會面臨太多性能問題,所以Python的使用場景很廣。但是,總會有碰到性能問題的一天,這種情況下首要的就是要在Python技術框架內來進行性能優化了。

決定是否優化

性能優化是手段,是為了解決其它一些問題。是否將性能優化作為正式開發任務,首要的就是達成共識。開發期的項目自然好說,上線后的項目就需要估計性能優化的工作量、相應風險以及評估大致的影響范圍。讓產品、開發、測試都意識到這項任務的必要性,而后才合適正式開始實施。

性能分析

性能優化必要步驟是分析瓶頸,首先得找到究竟慢在哪了,讓后再對癥下藥去進行修改。Python性能分析,直接使用自帶的cProfile進行處理就可以。用法也很簡單,閱讀官方文檔中 The Python Profilers  一節就足夠了。

cProfile結果的可視化工具有不少,不過配合編碼一起來的話,直接使用PyCharm打開最為方便。可以快速跳轉每一個耗時函數對應的代碼。

關注那些調用次數多的以及單次性能差的,那些大概率就是需要被優化的邏輯。

Python性能優化的方法路徑怎樣的

看個人簡介

優化檢查

在定位問題后就可以進行修改了。控制每次優化改動的范圍,一次改動一處,然后再次Profile對比。優化的每一次改進都需要數據的支撐,這樣能保證行進在正確的方向上,同時時間上也能有所掌控。

一些代碼的優化并不一定好實施,因此這種漸進性的優化方式,便于降低項目整體開發風險,能夠保證隨時有可用的版本,且是經過了一定優化的版本。

持續監控

在進行了性能優化之后,就需要注意對性能指標進行監控了。這樣能夠及時的了解性能全貌,一旦再次需要進行優化,也能及早得知決策。

Python代碼優化的常見方向

減少不必要的函數調用

很多時候沒有必要去優化一個函數實現本身,優先考慮是否能夠降低這個函數的調用次數,或是直接刪除這個函數。

這是一種很常見的情況,一些功能層面已經不再需要的遺留代碼占據了很多性能。如果一份代碼多人經手,需求多變,反復迭代,那么這種代碼是很有可能存在的。

搞清楚,然后刪掉它們。

讓運行時的動態計算靜態化

部分運行邏輯可以先離線生成得到靜態結果,運行時直接加載靜態結果就可以了,這部分性能也是應該要回收的。

適當應用緩存

那些不能直接靜態化的計算可能也可以緩存化。資源的創建銷毀也可以根據情況判定是否應用緩存或對象池資源池一類實現方式,避免重復運算。

需要注意的是避免因為緩存帶來的內存泄漏。

減少gc

Python通過引用計數與gc進行對象內存管理。對于引用計數無法處理的情況,Python會喚起gc進行處理,gc對性能有一定影響。因此代碼實現的時候最好gc友好,減少代碼中的引用環。

另外也可以通過設置gc參數來控制gc觸發的幾率,減少在高頻計算時的gc觸發,在空閑時刻手動觸發gc。

修改明顯錯誤的代碼實現

很多性能問題都是那些非關鍵邏輯導致的,這些邏輯往往一眼看去就欠缺性能上的考慮,比如,

  • 不斷通過for循環去進行查找

  • 錯誤的選擇了容器,導致不斷的遍歷查找

  • 在property實現中含有復雜的耗時邏輯,讓調用方忽視這一點

  • 在循環中添加了很多可以移到循環之外只運行一次的函數調用

  • 可以實現成事件觸發的邏輯變成了輪詢

  • 函數中存在大量重復調用

這類代碼本就不應該存在,找出來改掉,并盡力保證未來此類代碼不再進入代碼庫。

高頻調用中改進一些基礎用法

比如 這里 列出的一些常見用法的性能比較,在高頻調用的時候就可以看出性能差異,選擇更有效率的實現方式。

優化算法

部分邏輯可能可以從是實現方法層面進行優化,優化算法復雜度本身。

將部分邏輯改為原生代碼實現

通過C/C++來替換掉部分邏輯也是Python優化的常見手段。有幾種選擇,

  • 裸寫C/C++擴展

  • 使用Boost.Python實現C++擴展

  • 使用Cython

  • 使用PyPy

裸寫C/C++需要處理繁瑣的對象轉化以及引用處理,一般會選擇使用Boost.Python。使用起來方便很多。

采用Cython可以不去寫C++代碼,但是要寫Cython腳本。根據情況,有選擇使用。

PyPy相當于替換了運行時,在運行時不受掌控的情況下是不能采用的。服務端的話,可以考慮部分使用,通過進程隔離的方式解決一些依賴上的問題。

需要注意保留必要的Python實現,以便在遇到問題時可以快速切換回去。

關于Python性能優化的方法路徑怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

洛宁县| 隆尧县| 柏乡县| 东兰县| 兴安盟| 昆山市| 绥中县| 安康市| 广德县| 彰化县| 临清市| 台东县| 盐城市| 丰城市| 绵阳市| 绵竹市| 黄大仙区| 林西县| 太仓市| 汝阳县| 泰安市| 江油市| 布拖县| 邓州市| 平定县| 大港区| 营山县| 宝山区| 吴堡县| 桐乡市| 深水埗区| 南昌市| 平安县| 鄢陵县| 且末县| 潜江市| 什邡市| 科技| 新余市| 晴隆县| 华亭县|