国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

服務(wù)器資訊|IT/互聯(lián)網(wǎng)|云計(jì)算|區(qū)塊鏈|軟件資訊|操作系統(tǒng)|手機(jī)數(shù)碼|百科知識(shí)|免費(fèi)資源|頭條新聞|

服務(wù)器之家 - 新聞資訊 - 軟件資訊 - 代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%

代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%

2020-01-13 19:47大數(shù)據(jù)文摘微信公眾號(hào)王轉(zhuǎn)轉(zhuǎn) 軟件資訊

Python 已經(jīng)得到了全球程序員的喜愛(ài),但是還是遭到一些人的詬病,原因之一就是認(rèn)為它運(yùn)行緩慢。 其實(shí)某個(gè)特定程序(無(wú)論使用何種編程語(yǔ)言)的運(yùn)行速度是快還是慢,在很大程度上取決于編寫該程序的開(kāi)發(fā)人員自身素質(zhì),以及他們

Python已經(jīng)得到了全球程序員的喜愛(ài),但是還是遭到一些人的詬病,原因之一就是認(rèn)為它運(yùn)行緩慢。

其實(shí)某個(gè)特定程序(無(wú)論使用何種編程語(yǔ)言)的運(yùn)行速度是快還是慢,在很大程度上取決于編寫該程序的開(kāi)發(fā)人員自身素質(zhì),以及他們編寫優(yōu)化而高效代碼的能力。

Medium上一位小哥就詳細(xì)講了講如何讓python提速30%,以此證明代碼跑得慢不是python的問(wèn)題,而是代碼本身的問(wèn)題。

時(shí)序分析

在開(kāi)始進(jìn)行任何優(yōu)化之前,我們首先需要找出代碼的哪些部分使整個(gè)程序變慢。有時(shí)程序的問(wèn)題很明顯,但是如果你一時(shí)不知道問(wèn)題出在哪里,那么這里有一些可能的選項(xiàng):

注意:這是我將用于演示的程序,它將進(jìn)行指數(shù)計(jì)算(取自Python文檔):

代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%

如果你只能知道整個(gè)程序的運(yùn)行時(shí)間,這樣就夠了,但通常這還遠(yuǎn)遠(yuǎn)不夠。

最詳細(xì)的分析

另外一個(gè)指令是cProfile,但是它提供的信息過(guò)于詳細(xì)了。

代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%

在這里,我們使用cProfile模塊和time參數(shù)運(yùn)行測(cè)試腳本,以便按內(nèi)部時(shí)間(cumtime)對(duì)行進(jìn)行排序。這給了我們很多信息,你在上面看到的行大約是實(shí)際輸出的10%。由此可見(jiàn),exp函數(shù)是罪魁禍?zhǔn)祝F(xiàn)在我們可以更詳細(xì)地了解時(shí)序和性能分析。

時(shí)序特定功能

現(xiàn)在我們知道了應(yīng)當(dāng)主要關(guān)注哪里,我們可能想對(duì)運(yùn)行速度緩慢的函數(shù)計(jì)時(shí),而不用測(cè)量其余的代碼。為此,我們可以使用一個(gè)簡(jiǎn)單的裝飾器:

代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%

然后可以將此裝飾器應(yīng)用于待測(cè)功能,如下所示:

代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%

這給出我們?nèi)缦螺敵觯?/p>

代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%

需要考慮的一件事是我們實(shí)際想要測(cè)量的時(shí)間。時(shí)間包提供time.perf_counter和time.process_time兩個(gè)函數(shù)。他們的區(qū)別在于perf_counter返回的絕對(duì)值,包括你的Python程序進(jìn)程未運(yùn)行時(shí)的時(shí)間,因此它可能會(huì)受到計(jì)算機(jī)負(fù)載的影響。另一方面,process_time僅返回用戶時(shí)間(不包括系統(tǒng)時(shí)間),這僅是你的過(guò)程時(shí)間。

加速吧!

讓Python程序運(yùn)行得更快,這部分會(huì)很有趣!我不會(huì)展示可以解決你的性能問(wèn)題的技巧和代碼,更多地是關(guān)于構(gòu)想和策略的,這些構(gòu)想和策略在使用時(shí)可能會(huì)對(duì)性能產(chǎn)生巨大影響,在某些情況下,可以將速度提高30%。

使用內(nèi)置數(shù)據(jù)類型

這一點(diǎn)很明顯。內(nèi)置數(shù)據(jù)類型非常快,尤其是與我們的自定義類型(例如樹(shù)或鏈接列表)相比。這主要是因?yàn)閮?nèi)置程序是用C實(shí)現(xiàn)的,因此在使用Python進(jìn)行編碼時(shí)我們的速度實(shí)在無(wú)法與之匹敵。

使用lru_cache緩存/記憶

我已經(jīng)在上一篇博客中展示了此內(nèi)容,但我認(rèn)為值得用簡(jiǎn)單的示例來(lái)重復(fù)它:

代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%

上面的函數(shù)使用time.sleep模擬大量計(jì)算。第一次使用參數(shù)1調(diào)用時(shí),它將等待2秒鐘,然后才返回結(jié)果。再次調(diào)用時(shí),結(jié)果已經(jīng)被緩存,因此它將跳過(guò)函數(shù)的主體并立即返回結(jié)果。有關(guān)更多實(shí)際示例,請(qǐng)參見(jiàn)以前的博客文章。

使用局部變量

這與在每個(gè)作用域中查找變量的速度有關(guān),因?yàn)樗恢皇鞘褂镁植孔兞窟€是全局變量。實(shí)際上,即使在函數(shù)的局部變量(最快),類級(jí)屬性(例如self.name——較慢)和全局(例如,導(dǎo)入的函數(shù))如time.time(最慢)之間,查找速度實(shí)際上也有所不同。

你可以通過(guò)使用看似不必要的分配來(lái)提高性能,如下所示:

代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%

使用函數(shù)

這似乎違反直覺(jué),因?yàn)檎{(diào)用函數(shù)會(huì)將更多的東西放到堆棧上,并從函數(shù)返回中產(chǎn)生開(kāi)銷,但這與上一點(diǎn)有關(guān)。如果僅將整個(gè)代碼放在一個(gè)文件中而不將其放入函數(shù)中,則由于全局變量,它的運(yùn)行速度會(huì)慢得多。因此,你可以通過(guò)將整個(gè)代碼包裝在main函數(shù)中并調(diào)用一次來(lái)加速代碼,如下所示:

代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%

不訪問(wèn)屬性

可能會(huì)使你的程序變慢的另一件事是點(diǎn)運(yùn)算符(.),它在獲得對(duì)象屬性時(shí)被使用。此運(yùn)算符使用__getattribute__觸發(fā)字典查找,這會(huì)在代碼中產(chǎn)生額外的開(kāi)銷。那么,我們?nèi)绾尾拍苷嬲苊?限制)使用它呢?

代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%

當(dāng)心字符串

使用模數(shù)(%s)或.format()進(jìn)行循環(huán)運(yùn)行時(shí),字符串操作可能會(huì)變得非常慢。我們有什么更好的選擇?根據(jù)雷蒙德·海廷格(Raymond Hettinger)最近的推特,我們唯一應(yīng)該使用的是f字符串,它是最易讀,最簡(jiǎn)潔且最快的方法。根據(jù)該推特,這是你可以使用的方法列表——最快到最慢:

代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%

生成器本質(zhì)上并沒(méi)有更快,因?yàn)樗鼈儽辉试S進(jìn)行延遲計(jì)算,從而節(jié)省了內(nèi)存而不是時(shí)間。但是,保存的內(nèi)存可能會(huì)導(dǎo)致你的程序?qū)嶋H運(yùn)行得更快。這是怎么做到的?如果你有一個(gè)很大的數(shù)據(jù)集,而沒(méi)有使用生成器(迭代器),那么數(shù)據(jù)可能會(huì)溢出CPU L1緩存,這將大大減慢內(nèi)存中值的查找速度。

在性能方面,非常重要的一點(diǎn)是CPU可以將正在處理的所有數(shù)據(jù)盡可能地保存在緩存中。你可以觀看Raymond Hettingers的視頻,他在其中提到了這些問(wèn)題。

結(jié)論

優(yōu)化的首要規(guī)則是不要優(yōu)化。但是,如果確實(shí)需要,那么我希望上面這些技巧可以幫助你。但是,在優(yōu)化代碼時(shí)要小心,因?yàn)樗赡茏罱K使你的代碼難以閱讀,因此難以維護(hù),這可能超過(guò)優(yōu)化的好處。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩精品极品视频在线观看免费 | 国产97人人超碰caoprom | 亚洲夜幕久久日韩精品一区 | 在线观看中文字幕 | 欧美日韩精品一区二区三区四区 | 午夜影晥| 在线视频不卡一区 | 久久福利电影 | 国产欧美精品区一区二区三区 | 岛国一区 | 欧美日本韩国一区二区三区 | 99久久婷婷国产综合精品电影 | 日韩欧美在线观看 | 欧美精品一区二区三区蜜桃视频 | 久久综合伊人 | 欧美一级内谢 | 日本久久久 | 亚洲五码在线 | 亚洲欧美精品 | 99久久精品免费看国产四区 | 亚洲 欧美 日韩 在线 | 亚洲第一成av人网站懂色 | 久久伊人一区 | 在线观看亚洲成人 | 成人免费视频播放 | 91中文在线 | 欧美a级在线观看 | 亚洲高清视频在线 | 精品一区二区久久久久久久网站 | 亚洲激情精品 | 久久国产午夜 | 日韩欧一区二区三区 | 国产麻豆精品 | 日本在线观看一区二区 | 激情综合五月天 | 韩国精品一区二区 | 一a级毛片| 黄色精品一区二区 | 色接久久 | 亚洲视频免费在线观看 | 在线观看av网站 |