日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

提高python代碼運行效率的一些建議

瀏覽:23日期:2022-07-09 15:21:49

1. 優(yōu)化代碼和算法

一定要先好好看看你的代碼和算法。許多速度問題可以通過實現(xiàn)更好的算法或添加緩存來解決。本文所述都是關(guān)于這一主題的,但要遵循的一些一般指導(dǎo)方針是:

測量,不要猜測。 測量代碼中哪些部分運行時間最長,先把重點放在那些部分上。 實現(xiàn)緩存。 如果你從磁盤、網(wǎng)絡(luò)和數(shù)據(jù)庫執(zhí)行多次重復(fù)的查找,這可能是一個很大的優(yōu)化之處。 重用對象,而不是在每次迭代中創(chuàng)建一個新對象。Python 必須清理你創(chuàng)建的每個對象才能釋放內(nèi)存,這就是所謂的“垃圾回收”。許多未使用對象的垃圾回收會大大降低軟件速度。 盡可能減少代碼中的迭代次數(shù),特別是減少迭代中的操作次數(shù)。 避免(深度)遞歸。 對于 Python 解釋器來說,它需要大量的內(nèi)存和維護(Housekeeping)。改用生成器和迭代之類的工具。 減少內(nèi)存使用。 一般來說,盡量減少內(nèi)存的使用。例如,對一個巨大的文件進行逐行解析,而不是先將其加載到內(nèi)存中。 不要這樣做。 聽起來很傻是吧?但是你真的需要執(zhí)行這個操作嗎?不能晚點兒再執(zhí)行嗎?或者可以只執(zhí)行一次,并且它的結(jié)果可以存儲起來,而不是一遍又一遍地反復(fù)計算?

2. 使用 PyPy

你可能正在使用 Python 的參考實現(xiàn) CPython。之所以稱為 CPython,是因為它是用 C 語言編寫的。如果你確定你的代碼是 CPU 密集型(CPU bound)(如果你不知道這一術(shù)語,請參見本文“使用線程”一節(jié))的話,那么你應(yīng)該研究一下 PyPy,它是 CPython 的替代方案。這可能是一種快速解決方案,無需更改任何一行代碼。

PyPy 聲稱,它的平均速度比 CPython 要快 4.4 倍。它是通過使用一種稱為 Just-in-time(JIT,即時編譯)技術(shù)來實現(xiàn)的。Java 和 .NET 框架就是 JIT 編譯的其他著名的例子。相比之下,CPython 使用解釋來執(zhí)行代碼。雖然這一做法提供了很大的靈活性,但速度也變得慢了下來。

使用 JIT,你的代碼是在運行程序時即時編譯的。它結(jié)合了 Ahead-of-time(AOT,提前編譯)技術(shù)的速度優(yōu)勢(由 C 和 C++ 等語言使用)和解釋的靈活性。另一個優(yōu)點是 JIT 編譯器可以在運行時不斷優(yōu)化代碼。代碼運行的時間越長,它就會變得越優(yōu)化。

PyPy 在過去幾年中取得了長足的進步,通常情況下,它可以作為 Python 2 和 Python 3 的簡易替換方案。使用 Pipenv 這樣的工具,它也可以完美地工作,試試看吧!

3. 使用線程

大部分軟件都是 IO 密集型,而不是 CPU 密集型。如果你對這些術(shù)語還不熟悉的話,請看看下面的解釋:

IO 密集型(I/O bound):軟件主要是等待輸入 / 輸出操作完成才能工作。在從網(wǎng)絡(luò)或緩慢的存儲中獲取數(shù)據(jù)時,通常會出現(xiàn)這種情況。 CPU 密集型(CPU bound):軟件占用了大量的 CPU 資源。它使用了 CPU 所有的能力來產(chǎn)生所需的結(jié)果。

在等待來自網(wǎng)絡(luò)或磁盤的應(yīng)答時,你可以使用多個線程使其他部分保持運行狀態(tài)。

一個線程是一個獨立的執(zhí)行序列。默認(rèn)情況下,Python 程序有一個主線程。但你可以創(chuàng)建更多的主線程,并讓 Python 在它們之間切換。這種切換發(fā)生得如此之快,以至于它們看上去就好像是在同時并排運行一樣。

提高python代碼運行效率的一些建議

但與其他編程語言不同的是,Python 并不是同時運行的,而是輪流運行。這是因為 Python 中有一種全局解釋器鎖( Global Interpreter Lock,GIL)機制。這一點,以及 threading 庫在 我撰寫的關(guān)于 Python 并發(fā)性的文章 有詳細(xì)的解釋。

我們得到的結(jié)論是,線程對于 IO 密集型的軟件有很大的影響,但對 CPU 密集型的軟件毫無用處。

這是為什么呢?很簡單。當(dāng)一個線程在等待來自網(wǎng)絡(luò)的答復(fù)時,其他線程可以繼續(xù)運行。如果你要執(zhí)行大量的網(wǎng)絡(luò)請求,線程可以帶來巨大的差異。如果你的線程正在進行繁重的計算,那么它們只是等待輪到它們繼續(xù)計算,線程化只會帶來更多的開銷。

4. 使用 Asyncio

Asyncio 是 Python 中一個相對較新的核心庫。它解決了與線程相同的問題:它加快了 IO 密集型軟件的速度,但這是以不同的方式實現(xiàn)的。我將立即坦承我并非 Python 的 asyncio 擁躉。它相當(dāng)復(fù)雜,特別是對于初學(xué)者來說。我遇到的另一個問題是, asyncio 庫在過去幾年中有了很大的發(fā)展。網(wǎng)上的教程和示例代碼常常已經(jīng)過時。不過,這并不意味著它就毫無用處。

5 同時使用多個處理器

如果你的軟件是 CPU 密集型的,你通常可以用一種可以同時使用更多處理器的方式重寫你的代碼。通過這種方式,你就可以線性地調(diào)整執(zhí)行速度。

這就是所謂的并行性,但并不是所有的算法都可以并行運行。例如,簡單的將遞歸算法進行并行化是不可能的。但是幾乎總有一種替代算法可以很好地并行工作。

使用更多處理處理器有兩種方式:

在同一臺機器內(nèi)使用多個處理器和 / 或內(nèi)核。在 Python 中,這可以通過 multiprocessing 庫來完成。 使用計算機網(wǎng)絡(luò)來使用多個處理器,分布在多臺計算機上。我們稱之為分布式計算。

這篇 關(guān)于 Python 并發(fā)性的文章 側(cè)重于介紹如何在一臺機器的范圍內(nèi)擴展 Python 軟件的方法。它還介紹了 multiprocessing 庫。如果你認(rèn)為這是你需要的資料,一定要去看看。

與 threading 庫不同, multiprocessing 庫繞過了 Python 的全局解釋器鎖。它實際上是通過派生多個 Python 實例來實現(xiàn)這一點的。因此,現(xiàn)在你可以讓多個 Python 進程同時運行你的代碼,而不是在單個 Python 進程中輪流運行線程。

提高python代碼運行效率的一些建議

multiprocessing 庫和 threading 庫非常相似。可能出現(xiàn)的問題是:為什么還要考慮線程呢?答案是可以猜得到的。線程是“輕量”的:它需要更少的內(nèi)存,因為它只需要一個正在運行的 Python 解釋器。產(chǎn)生新進程也還有其開銷。因此,如果你的代碼是 IO 密集型的,線程可能就足夠好了。

一旦你實現(xiàn)了軟件的并行工作,那么在使用 Hadoop 之類的分布式計算方面就前進了一小步。通過利用云計算平臺,你可以相對輕松地進行擴展規(guī)模。例如,你可以在云端中處理大型數(shù)據(jù)集,并在本地使用結(jié)果。使用混合操作的方式,你可以節(jié)省一些資金,因為云端中的算力非常昂貴。

總結(jié)

總結(jié)起來就是:

首先考慮優(yōu)化你的算法和代碼。 如果原始速度可以解決你的問題,請考慮使用 PyPy。 對 IO 密集型軟件使用 threading 庫和 asyncio 。 使用 multiprocessing 庫解決 CPU 密集型問題。 如果所有這些措施還不夠的話,可以利用 Hadoop 等云計算平臺進行擴展規(guī)模。

以上就是提高python代碼運行效率的一些建議的詳細(xì)內(nèi)容,更多關(guān)于提高python代碼運行效率的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91久久久精品国产| 成人久久一区| 日韩午夜高潮| 激情欧美一区二区三区| 久久精品国语| 欧美1区2区3区| 亚洲激情五月| 免费在线成人网| 亚洲精品进入| 欧美日韩一区二区三区四区在线观看| 日韩激情精品| 国产精品s色| 精品一区二区三区四区五区| 精品国产乱码久久久久久1区2匹| 国产传媒在线观看| 国产激情在线播放| 精品丝袜在线| 激情久久婷婷| 免费人成在线不卡| 日本强好片久久久久久aaa| 国产香蕉精品| 久久免费精品| 欧洲av不卡| 91久久久久| 日韩不卡手机在线v区| 久久精品天堂| 色婷婷久久久| 石原莉奈在线亚洲三区| 综合国产精品| 久久国产生活片100| 免费在线亚洲| 亚洲二区免费| 蜜臀a∨国产成人精品| 91精品日本| 伊人久久av| 在线亚洲欧美| 欧美另类中文字幕 | 日韩不卡在线观看日韩不卡视频 | 91免费精品国偷自产在线在线| 麻豆中文一区二区| 久久国产影院| 亚洲毛片在线| 精品少妇一区| 亚洲性视频h| 日韩成人av影视| 欧美国产偷国产精品三区| 亚洲免费播放| 国产欧美大片| 亚洲综合在线电影| 免费观看久久av| 乱人伦精品视频在线观看| 欧美中文一区| 中文字幕人成乱码在线观看 | 日本久久成人网| 一区二区亚洲视频| 久久精品国产精品亚洲毛片| 日韩欧美一区二区三区在线视频 | 国产欧洲在线| 亚洲深深色噜噜狠狠爱网站| 老司机精品视频在线播放| 亚洲激情黄色| 麻豆国产精品视频| 日韩中文字幕区一区有砖一区| 久久影视三级福利片| 亚洲欧美日韩综合国产aⅴ| 久久一区精品| 精品一区免费| 精品中文在线| 亚洲精品影视| 丝袜美腿一区| 国产精品三p一区二区| 午夜日本精品| 精品高清久久| 亚洲精品国产精品粉嫩| 日韩精品水蜜桃| 国产精品www.| 亚洲18在线| 午夜久久99| 成人片免费看| 国产精品巨作av| 在线视频亚洲欧美中文| 亚洲国产欧美日本视频| 人人爱人人干婷婷丁香亚洲| 欧美日韩激情在线一区二区三区| 麻豆国产精品| 日韩午夜视频在线| 国产精品嫩草99av在线| 日本久久成人网| 精品久久网站| 911精品国产| 亚洲理论在线| 国产亚洲毛片| 天堂资源在线亚洲| 视频在线不卡免费观看| 国产精品亚洲欧美日韩一区在线 | 日韩va亚洲va欧美va久久| 午夜日韩在线| 成人自拍av| 精品午夜久久| 国产精品亚洲综合在线观看| 日本va欧美va瓶| 日韩精品一级中文字幕精品视频免费观看 | 欧美99久久| 一本大道色婷婷在线| 久久a爱视频| 国产欧美一区| 欧美三级第一页| 欧美日韩a区| 久久国产人妖系列| 日韩午夜免费| 美女国产精品| 三级精品视频| 欧美gv在线| 国产伦久视频在线观看| 美女精品久久| 亚洲va久久| 日本欧美在线看| 国产免费成人| 国产麻豆综合| 午夜在线精品偷拍| 最新日韩av| 欧美综合国产| 亚洲深夜福利| 日韩午夜av| 国产午夜久久| 香蕉视频成人在线观看| 日韩视频免费| 日韩视频一区二区三区在线播放免费观看| 久久麻豆精品| 在线亚洲观看| 夜夜嗨一区二区| 日av在线不卡| 四虎成人精品一区二区免费网站| 亚洲精品乱码久久久久久蜜桃麻豆| 视频一区欧美日韩| 亚洲精品日韩久久| 视频精品一区| 久久国产免费看| 免费精品一区| 国产一区二区三区四区| 亚洲伦乱视频| 亚州av乱码久久精品蜜桃| 丝袜美腿一区二区三区| 久久av在线| 中文字幕一区二区三区在线视频| 午夜影院欧美| 亚洲精品一二| 久久不卡日韩美女| 国产美女高潮在线观看| 欧美色图国产精品| 日韩在线卡一卡二| 欧美日韩va| 精品久久国产一区| 久久免费大视频| 最新亚洲国产| 久久wwww| 秋霞国产精品| 视频一区欧美日韩| 国产日韩1区| 亚洲精品88| 西西人体一区二区| 国产午夜一区| 999国产精品| 日韩有码av| 久久不见久久见中文字幕免费| 天堂8中文在线最新版在线| 美女亚洲一区| 日韩一区精品视频| 美女视频黄久久| 日本美女一区| 亚洲欧美视频一区二区三区| 亚洲精品福利| 精品精品99| 亚洲精品1区| 国产日韩高清一区二区三区在线 | 欧美专区一区| а√天堂8资源在线| 精品日韩毛片| 国产精品三级| 亚洲高清久久| 国产人成精品一区二区三| 久久九九电影| 欧美日韩伊人| 伊人久久大香线蕉av不卡| 石原莉奈在线亚洲二区| 美女视频免费精品| 波多野结衣一区| 国产欧美一区二区三区精品观看| 久久久久久久久99精品大| 日韩精品1区2区3区| 亚洲播播91| 久久精品99久久久| 欧美日韩精品在线一区| 国产精品久一| 视频在线观看91| 麻豆mv在线观看| 日韩精品一区二区三区免费视频| 日韩一区二区三区在线免费观看| 日韩国产高清在线| 日韩国产一区二区三区|