久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 為什么Python運(yùn)行速度慢?

為什么Python運(yùn)行速度慢?

來(lái)源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-10-11 12:54:26 1697000066

一、Python運(yùn)行速度慢的原因

1、python是解釋性語(yǔ)言

python是一個(gè)解釋性的動(dòng)態(tài)類(lèi)型腳本語(yǔ)言,解釋性語(yǔ)言的特點(diǎn)就是程序只有在執(zhí)行的時(shí)候才會(huì)去編譯,也就是說(shuō)邊執(zhí)行邊進(jìn)行編譯。而Java、C這種編譯性的語(yǔ)言在程序執(zhí)行之前就已經(jīng)將其編譯為機(jī)器可讀的代碼了,自然運(yùn)行速度快。而且python程序在沒(méi)有運(yùn)行之前都是能夠直接以源碼的形式存在的,這也是它能夠跨平臺(tái)運(yùn)行的主要原因,但是在沒(méi)有經(jīng)過(guò)編譯的python運(yùn)行速度上就會(huì)有所降低。

2、Python是動(dòng)態(tài)語(yǔ)言

動(dòng)態(tài)語(yǔ)言是一類(lèi)在運(yùn)行時(shí)可以改變其結(jié)構(gòu)的語(yǔ)言,如新的函數(shù)、對(duì)象、代碼可以被引入,已有的函數(shù)可以被刪除或其他結(jié)構(gòu)上的變化等,該類(lèi)語(yǔ)言更具有活性,但是不可避免的因?yàn)檫\(yùn)行時(shí)的不確定性也影響運(yùn)行效率。數(shù)據(jù)的比較和轉(zhuǎn)換類(lèi)型的開(kāi)銷(xiāo)很大,每次讀取、寫(xiě)入或引用一個(gè)變量,都要檢查類(lèi)型。很難優(yōu)化一種極具動(dòng)態(tài)性的語(yǔ)言。Python的許多替代語(yǔ)言之所以快得多,原因在于它們?yōu)榱诵阅茉陟`活性方面作出了犧牲。

3、Python中一切都是對(duì)象

Python是一門(mén)面向?qū)ο蟮木幊陶Z(yǔ)言,其設(shè)計(jì)理念是一切皆是對(duì)象,如數(shù)字、字符串、元組、列表、字典、函數(shù)、方法、類(lèi)、模塊等都是對(duì)象,包括代碼,每個(gè)對(duì)象都需要維護(hù)引用計(jì)數(shù),因此,增加了額外工作,影響了性能。

4、Python GIL

GIL是Python最為詬病的一點(diǎn),因?yàn)镚IL,Python中的多線程并不能真正的并發(fā),即使在單線程,GIL也會(huì)帶來(lái)很大的性能影響,因?yàn)閜ython每執(zhí)行100個(gè)opcode就會(huì)嘗試線程的切換,因此,影響Python運(yùn)行效率。

5、垃圾回收機(jī)制

Python采用標(biāo)記和分代的垃圾回收策略,每次垃圾回收的時(shí)候都會(huì)中斷正在執(zhí)行的程序,造成所謂的頓卡,影響運(yùn)行效率。

二、提升Python性能的方案

1、Cython

是Python的C語(yǔ)言擴(kuò)展,cPython是一門(mén)單獨(dú)的語(yǔ)言,專(zhuān)門(mén)用來(lái)寫(xiě)在Python里面的import用的擴(kuò)展庫(kù)。CPython跟Python語(yǔ)法基本一致,而CPython有專(zhuān)門(mén)的編譯器。據(jù)說(shuō),Cython提供了一些特性來(lái)讓代碼更高效,比如變量類(lèi)型化,這本質(zhì)上是C要求的。一些科學(xué)計(jì)算的包,如scikit-learn依賴Cython的一些特性來(lái)保持操作簡(jiǎn)潔快速。

2、Pyston

Pyston,由Dropbox資助,使用LLVM編譯器架構(gòu)來(lái)加速Python,同樣的它也使用了適時(shí)編譯。相比于PyPy,Pyston還處于早期階段,它只支持Python的部分特性。Pyston把工作分成兩個(gè)部分,一部分是語(yǔ)言的核心特性,另一部分是把性能提升到可接受的程度。Pyston距離可以在生產(chǎn)環(huán)境使用還有一段距離

3、Nuitka

是一個(gè)Python的替代品,它可以將Python代碼轉(zhuǎn)換為C++代碼,然后編譯為可執(zhí)行文件,并且通過(guò)調(diào)用Python的API的方式實(shí)現(xiàn)從解析語(yǔ)言到編譯語(yǔ)言的轉(zhuǎn)換,在轉(zhuǎn)換到C++的過(guò)程中直接使用python的解釋器,可以保證100%的語(yǔ)法兼容。

4、Numba

Numba結(jié)合了上面幾個(gè)項(xiàng)目的想法。學(xué)習(xí)了Cython,Numba也采用了部分加速的策略,只加速CPU密集型的任務(wù);同時(shí)它又學(xué)習(xí)了PyPy和Pyston,通過(guò)LLVM運(yùn)行Python。你可以用一個(gè)裝飾器指定你要用Numba編譯的函數(shù),Numba繼承Numpy來(lái)加速函數(shù)的執(zhí)行,Numba不做適時(shí)編譯,它的代碼是預(yù)先編譯的。

5、PyPy

在選擇CPython的簡(jiǎn)易替代語(yǔ)言時(shí),pypy無(wú)疑時(shí)優(yōu)異之選,與現(xiàn)有Python代碼保持高度兼容性,pypy也是默認(rèn)程序運(yùn)行時(shí)的一個(gè)很好選擇。PyPy使用了Just-in-Time即時(shí)編譯器,動(dòng)態(tài)編譯器與靜態(tài)編譯器不同,利用程序運(yùn)行的過(guò)程的數(shù)據(jù)進(jìn)行優(yōu)化。

PyPy使用適時(shí)編譯來(lái)加速Python,這項(xiàng)技術(shù)Google也在使用,Google在V8引擎中使用它加速Javascript。最近的版本PyPy2.5增加了一些提升性能的特性,其中有一項(xiàng)很受歡迎,它集成了Numpy,Numpy之前也一直被用來(lái)加速Python的運(yùn)行。

延伸閱讀1:Python優(yōu)勢(shì)

Python最大的優(yōu)勢(shì)在于效率。有時(shí)候程序員或科研工作者的效率比機(jī)器的效率更重要,對(duì)于很多復(fù)雜性的功能,使用更加清晰的語(yǔ)言能給程序減少更多的負(fù)擔(dān),從而大大增強(qiáng)程序的質(zhì)量,其易學(xué)性和擴(kuò)展性也能讓新手很快上手。雖然Python底層運(yùn)行速度要比C語(yǔ)言慢,但Python清晰的結(jié)構(gòu)能解放程序員的時(shí)間,同時(shí)很方便的和其他編程語(yǔ)言代碼(如C語(yǔ)言)融合在一起。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專(zhuān)屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
Spring和Spring Boot有什么區(qū)別?

一、Spring和Spring Boot的區(qū)別1、基于的概念不同Spring是一個(gè)完整的企業(yè)級(jí)應(yīng)用程序開(kāi)發(fā)框架,它提供了一系列的模塊,如Spring Core、Spring MV...詳情>>

2023-10-11 14:36:13
APP開(kāi)發(fā)和小程序開(kāi)發(fā)有什么不同?

一、APP開(kāi)發(fā)和小程序開(kāi)發(fā)的不同1、平臺(tái)限制不同APP開(kāi)發(fā)需要針對(duì)不同的操作系統(tǒng),如iOS、Android等進(jìn)行開(kāi)發(fā),而小程序只能在微信、支付寶、百度...詳情>>

2023-10-11 14:33:12
JS正則中exec與match有哪些區(qū)別?

一、JS正則中exec與match的區(qū)別1、匹配多個(gè)結(jié)果不同exec()方法會(huì)匹配并返回所有滿足正則表達(dá)式條件的結(jié)果,而match()方法只會(huì)返回名列前茅個(gè)滿...詳情>>

2023-10-11 14:25:31
沒(méi)有內(nèi)存泄漏,為什么還會(huì)OOM?

一、沒(méi)有內(nèi)存泄漏還會(huì)OOM的原因即使沒(méi)有內(nèi)存泄漏,也有可能出現(xiàn)OOM(Out of Memory)的情況,這通常是由于應(yīng)用程序占用的內(nèi)存超過(guò)了系統(tǒng)可用的...詳情>>

2023-10-11 13:45:53
為什么要初始化CSS樣式?

一、初始化CSS樣式的原因在Web開(kāi)發(fā)中,初始化CSS樣式是一個(gè)常見(jiàn)的做法。這是因?yàn)椴煌臑g覽器會(huì)對(duì)同一份HTML代碼進(jìn)行不同的解析和渲染,可能會(huì)...詳情>>

2023-10-11 13:37:57
快速通道