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

您的位置:首頁技術文章
文章詳情頁

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

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

1. 優化代碼和算法

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

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

2. 使用 PyPy

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

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

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

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

3. 使用線程

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

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

在等待來自網絡或磁盤的應答時,你可以使用多個線程使其他部分保持運行狀態。

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

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

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

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

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

4. 使用 Asyncio

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

5 同時使用多個處理器

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

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

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

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

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

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

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

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

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

總結

總結起來就是:

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

以上就是提高python代碼運行效率的一些建議的詳細內容,更多關于提高python代碼運行效率的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国语对白精品一区二区| 久久成人精品| 日韩国产欧美三级| 亚洲精品激情| 日本成人在线不卡视频| 日韩精品免费一区二区夜夜嗨 | 欧美在线观看天堂一区二区三区| 中文字幕一区二区av| 久久最新视频| 久久国产精品久久久久久电车| 欧美 日韩 国产精品免费观看| 九九综合在线| 视频在线在亚洲| 日本不卡一区二区| 国产欧美日韩精品一区二区三区| 国产精品免费99久久久| 精品国产亚洲一区二区三区大结局| 精品日韩在线| 亚洲a一区二区三区| 免费国产自久久久久三四区久久 | 久久久精品久久久久久96| 99久久婷婷这里只有精品| 狠狠色综合网| 日韩精品中文字幕一区二区| 国产精品99久久免费| 水蜜桃精品av一区二区| 亚洲成人二区| 免费久久99精品国产| 69堂精品视频在线播放| 精品国产亚洲一区二区三区在线 | 激情91久久| 蜜桃久久av一区| 国产精品一区高清| 国产精品久久久久av电视剧| 亚洲专区一区| 国产日韩视频在线| 欧美sm一区| 一本一道久久a久久| 国产人成精品一区二区三| 日韩成人免费| 日韩一区精品视频| 国产精品视频一区二区三区 | 视频福利一区| 亚洲乱码一区| 欧美xxxx性| 国产一区视频在线观看免费| 亚洲精品福利| 国产一区二区三区四区五区| 一区二区自拍| 免费在线观看一区| 欧美美女一区| 久久精品99国产精品日本| 中文字幕成在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产乱码精品| 日韩亚洲国产欧美| 老司机精品视频网| 日韩一区欧美二区| 日韩福利一区| 久久亚洲国产精品一区二区| 国产精品www.| 99热精品在线| 国产aⅴ精品一区二区三区久久| 久久国产精品久久久久久电车| 国产一区二区三区不卡视频网站| 中文精品电影| 久久久精品久久久久久96| 国产精品一区二区三区四区在线观看| 午夜久久99| 国产精品xx| 欧美日韩一区自拍| 美女精品在线观看| 日韩av首页| 麻豆精品久久久| 伊人久久成人| 国产精品成人a在线观看| 五月激激激综合网色播| 在线日韩一区| 在线看片国产福利你懂的| 国产亚洲一区二区三区啪| 影院欧美亚洲| 亚洲成人一区在线观看| 国产精品久久久久77777丨 | 久久午夜影视| 久久免费高清| 精品一区二区三区的国产在线观看 | 亚洲午夜免费| 日韩成人亚洲| 精品中文字幕一区二区三区四区| 日韩精选在线| 香蕉成人久久| 久久精品青草| 欧洲一区二区三区精品| 国产精品porn| 91精品麻豆| 亚州国产精品| 亚洲三级视频| 国产农村妇女精品一二区| 激情国产在线| 欧美激情综合| 国产精品一区二区av交换| 亚洲午夜久久| 久久最新视频| 男女激情视频一区| 国产午夜精品一区二区三区欧美 | 欧美二三四区| 国产高潮在线| 精品国产aⅴ| 国产精品www.| 久久av综合| 国产日产一区| 久久国产欧美日韩精品| 色综合视频一区二区三区日韩| 视频一区欧美日韩| 玖玖精品视频| 亚洲午夜免费| 亚洲伊人精品酒店| 伊人www22综合色| 亚洲深夜福利在线观看| 亚洲影视一区| 婷婷成人av| 亚洲毛片在线| 日韩激情av在线| 欧美久久精品| 国产精品观看| 国产一区二区视频在线看| 日本黄色精品| 国产在线观看www| 日韩电影免费网站| av一区在线| 午夜久久黄色| 麻豆91精品| 亚洲aa在线| 国产精品chinese| 97国产成人高清在线观看| 久久91导航| 国产精品毛片| 日韩精品一区二区三区中文在线| 青青草国产精品亚洲专区无| 国产日韩欧美一区二区三区在线观看| 久久不卡国产精品一区二区| 国产成人免费av一区二区午夜| 欧美精品91| 国产白浆在线免费观看| 91精品一区二区三区综合| 91久久黄色| 亚州精品视频| 麻豆精品少妇| 久久婷婷激情| 另类亚洲自拍| 国产精品高清一区二区| 电影亚洲精品噜噜在线观看| av成人国产| 97精品资源在线观看| 精品国内亚洲2022精品成人| av在线日韩| 免费观看在线综合| 天海翼精品一区二区三区| 国产精品一区二区av交换| 91av亚洲| 一区二区三区网站| 麻豆91精品视频| 99国产精品免费视频观看| 另类av一区二区| 国产精品a级| 欧美一区二区三区激情视频| 亚洲精品影视| 国产精品久久久久久久久久10秀| 免费观看不卡av| 国产调教精品| 亚洲天堂黄色| 国产亚洲人成a在线v网站| 成人国产精选| 欧美成人国产| 国产日韩欧美三区| 999国产精品视频| 欧美日韩黄网站| 亚洲电影在线| 国产伦精品一区二区三区视频| 三上悠亚国产精品一区二区三区| 六月丁香综合| 高清av不卡| 日本不卡视频在线观看| 毛片在线网站| 亚洲欧美久久精品| 国产一区二区三区四区大秀| 免费在线看一区| 美女久久久久久 | 五月天激情综合网| 欧美精品国产| 红桃视频国产精品| 麻豆高清免费国产一区| 美国三级日本三级久久99| 老牛影视精品| 欧美日韩黄网站| 亚洲黄色在线| 97精品国产一区二区三区| 亚洲精品乱码久久久久久蜜桃麻豆| 精品一区二区三区免费看| 欧美专区一区二区三区|