日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python性能優(yōu)化的方法路徑怎樣的-創(chuàng)新互聯(lián)

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

目前成都創(chuàng)新互聯(lián)公司已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管維護、企業(yè)網(wǎng)站設(shè)計、西藏網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

前言

Python作為程序語言最被人詬病的一點在于其性能。Python作為動態(tài)語言,性能并不是它的優(yōu)勢,但很多時候?qū)嶋H也不會面臨太多性能問題,所以Python的使用場景很廣。但是,總會有碰到性能問題的一天,這種情況下首要的就是要在Python技術(shù)框架內(nèi)來進行性能優(yōu)化了。

決定是否優(yōu)化

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

性能分析

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

cProfile結(jié)果的可視化工具有不少,不過配合編碼一起來的話,直接使用PyCharm打開最為方便??梢钥焖偬D(zhuǎn)每一個耗時函數(shù)對應(yīng)的代碼。

關(guān)注那些調(diào)用次數(shù)多的以及單次性能差的,那些大概率就是需要被優(yōu)化的邏輯。

Python性能優(yōu)化的方法路徑怎樣的

看個人簡介

優(yōu)化檢查

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

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

持續(xù)監(jiān)控

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

Python代碼優(yōu)化的常見方向

減少不必要的函數(shù)調(diào)用

很多時候沒有必要去優(yōu)化一個函數(shù)實現(xiàn)本身,優(yōu)先考慮是否能夠降低這個函數(shù)的調(diào)用次數(shù),或是直接刪除這個函數(shù)。

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

搞清楚,然后刪掉它們。

讓運行時的動態(tài)計算靜態(tài)化

部分運行邏輯可以先離線生成得到靜態(tài)結(jié)果,運行時直接加載靜態(tài)結(jié)果就可以了,這部分性能也是應(yīng)該要回收的。

適當(dāng)應(yīng)用緩存

那些不能直接靜態(tài)化的計算可能也可以緩存化。資源的創(chuàng)建銷毀也可以根據(jù)情況判定是否應(yīng)用緩存或?qū)ο蟪刭Y源池一類實現(xiàn)方式,避免重復(fù)運算。

需要注意的是避免因為緩存帶來的內(nèi)存泄漏。

減少gc

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

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

修改明顯錯誤的代碼實現(xiàn)

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

  • 不斷通過for循環(huán)去進行查找

  • 錯誤的選擇了容器,導(dǎo)致不斷的遍歷查找

  • 在property實現(xiàn)中含有復(fù)雜的耗時邏輯,讓調(diào)用方忽視這一點

  • 在循環(huán)中添加了很多可以移到循環(huán)之外只運行一次的函數(shù)調(diào)用

  • 可以實現(xiàn)成事件觸發(fā)的邏輯變成了輪詢

  • 函數(shù)中存在大量重復(fù)調(diào)用

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

高頻調(diào)用中改進一些基礎(chǔ)用法

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

優(yōu)化算法

部分邏輯可能可以從是實現(xiàn)方法層面進行優(yōu)化,優(yōu)化算法復(fù)雜度本身。

將部分邏輯改為原生代碼實現(xiàn)

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

  • 裸寫C/C++擴展

  • 使用Boost.Python實現(xiàn)C++擴展

  • 使用Cython

  • 使用PyPy

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

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

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

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

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


本文名稱:Python性能優(yōu)化的方法路徑怎樣的-創(chuàng)新互聯(lián)
文章出自:http://www.dlmjj.cn/article/cssihj.html