电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:3日期: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 編程
相關文章:
主站蜘蛛池模板: 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 欧盟ce检测认证_reach检测报告_第三方检测中心-深圳市威腾检验技术有限公司 | 自清洗过滤器_全自动过滤器_全自动反冲洗过滤器_量子过滤器-滑漮滴 | 水厂自动化|污水处理中控系统|水利信息化|智慧水务|智慧农业-山东德艾自动化科技有限公司 | 外观设计_设备外观设计_外观设计公司_产品外观设计_机械设备外观设计_东莞工业设计公司-意品深蓝 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 玄米影院| 定坤静电科技静电消除器厂家-除静电设备 | 机械加工_绞车配件_立式离心机_减速机-洛阳三永机械厂 | 雷达液位计_超声波风速风向仪_雨量传感器_辐射传感器-山东风途物联网 | 奥因-光触媒除甲醛公司-除甲醛加盟公司十大品牌 | 发电机价格|发电机组价格|柴油发电机价格|柴油发电机组价格网 | 消防设施操作员考试报名时间,报名入口,报考条件 | 河南新乡德诚生产厂家主营震动筛,振动筛设备,筛机,塑料震动筛选机 | 江西高职单独招生-江西单招考试-江西高职单招网 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 涂层测厚仪_光泽度仪_uv能量计_紫外辐照计_太阳膜测试仪_透光率仪-林上科技 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | 北京发电车出租-发电机租赁公司-柴油发电机厂家 - 北京明旺盛安机电设备有限公司 | 铸钢件厂家-铸钢齿轮-减速机厂家-淄博凯振机械有限公司 | 挤塑板-XPS挤塑板-挤塑板设备厂家[襄阳欧格] | 发电机价格|发电机组价格|柴油发电机价格|柴油发电机组价格网 | 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 有源电力滤波装置-电力有源滤波器-低压穿排电流互感器|安科瑞 | 济南保安公司加盟挂靠-亮剑国际安保服务集团总部-山东保安公司|济南保安培训学校 | 分类168信息网 - 分类信息网 免费发布与查询| 电气控制系统集成商-PLC控制柜变频控制柜-非标自动化定制-电气控制柜成套-NIDEC CT变频器-威肯自动化控制 | 华禹护栏|锌钢护栏_阳台护栏_护栏厂家-华禹专注阳台护栏、楼梯栏杆、百叶窗、空调架、基坑护栏、道路护栏等锌钢护栏产品的生产销售。 | 预制围墙_工程预制围墙_天津市瑞通建筑材料有限公司 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 闸阀_截止阀_止回阀「生产厂家」-上海卡比阀门有限公司 | 捷码低代码平台 - 3D数字孪生_大数据可视化开发平台「免费体验」 | 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 期货软件-专业期货分析软件下载-云智赢 | 制氮设备-变压吸附制氮设备-制氧设备-杭州聚贤气体设备制造有限公司 | 上海风淋室_上海风淋室厂家_上海风淋室价格_上海伯淋 | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 |