python編程是啥 為什么Python效率這么低,還這么火?
為什么Python效率這么低,還這么火?在許多情況下,性能不是瓶頸。大約80%的應(yīng)用程序不需要高性能。如何優(yōu)化Python爬蟲(chóng)的速度?您可以評(píng)估爬網(wǎng)程序是Io密集型還是CPU密集型。IO密集型:程序?qū)?/p>
為什么Python效率這么低,還這么火?
在許多情況下,性能不是瓶頸。大約80%的應(yīng)用程序不需要高性能。
如何優(yōu)化Python爬蟲(chóng)的速度?
您可以評(píng)估爬網(wǎng)程序是Io密集型還是CPU密集型。
IO密集型:程序?qū)⒋蟛糠謺r(shí)間用于等待IO,如網(wǎng)絡(luò)IO,即HTTP請(qǐng)求、磁盤(pán)IO,即文件讀寫(xiě)等
CPU密集型:程序?qū)⒋蟛糠謺r(shí)間用于CPU計(jì)算,如文本處理、數(shù)值計(jì)算等
如果是IO密集型,然后您可以通過(guò)線程池或協(xié)程池來(lái)使用函數(shù)的這一部分來(lái)實(shí)現(xiàn)并發(fā),從而提高了速度。
但是,這里的網(wǎng)絡(luò)IO有一個(gè)前提。你的帶寬不是你的爬蟲(chóng)的瓶頸。
如果這是CPU密集型的,那么這部分工作可以通過(guò)進(jìn)程池(多進(jìn)程)并行處理,從而提高速度。多處理意味著你的機(jī)器是多核的。
不過(guò),還是有一些地方值得優(yōu)化,比如一些庫(kù)的選擇,比如靚湯。雖然它非常方便,但是有更快的實(shí)現(xiàn)方法,比如selectolax,它要快得多。
如果你不能判斷,先多線程,然后多進(jìn)程。
如果單臺(tái)機(jī)器無(wú)法解決,請(qǐng)使用工作隊(duì)列,例如cell。多機(jī)并行,當(dāng)然可以提高速度,而且是橫向擴(kuò)展,當(dāng)然這也要讓你的任務(wù)可以分布。
Python到底有多慢?
首先,我們用10個(gè)坐標(biāo)點(diǎn)來(lái)模擬城市的位置。由于我們平時(shí)對(duì)Python的使用比較多,也比較熟悉,所以我們首先選擇Python作為編程語(yǔ)言來(lái)實(shí)現(xiàn)蟻群算法,但是我們?cè)诘谝粫r(shí)間就等著睡著了。猜猜看有多長(zhǎng)時(shí)間,超過(guò)六分鐘,這是效率的可怕之處。你不能讓老師等6分鐘在最后的回答中選擇最佳路徑??峙乱獣和A?。用C語(yǔ)言對(duì)蟻群算法進(jìn)行了優(yōu)化,優(yōu)化結(jié)果不到1min。沒(méi)有比較就沒(méi)有壞處。在這之后,我深刻地認(rèn)識(shí)到Python執(zhí)行效率的可怕方面。
有些人可能想知道為什么C和Java比python更高效。事實(shí)上,它與語(yǔ)言的底層代碼有關(guān)。C語(yǔ)言是匯編語(yǔ)言的二次開(kāi)發(fā),Java大多是C和C的二次開(kāi)發(fā),但是我們的Python可以分為兩種情況,一種是Cpython,另一種是jpython,分別是C和Java的二次開(kāi)發(fā),所以效率比這兩種語(yǔ)言要低。我看到消息說(shuō),為了解決python的效率問(wèn)題,政府計(jì)劃重新開(kāi)發(fā)底層python代碼。最近,我沒(méi)有看到任何相關(guān)的新聞。畢竟,這個(gè)工作量是非常巨大的。