av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Python很慢?不一定哦

請(qǐng)注意,這有點(diǎn)夸張。

首先,我要說(shuō)明我是專(zhuān)業(yè)從事python工作的,我做出了許多開(kāi)源貢獻(xiàn),并且我所有的業(yè)余愛(ài)好項(xiàng)目都使用python進(jìn)行。我喜歡python。

但這很慢。

這是Reddit等論壇上的常見(jiàn)主題,人們說(shuō)您不能使用python,因?yàn)樗\(yùn)行緩慢。是的,我們都知道python很慢。但是我們也知道,通常會(huì)使事情變慢的不是語(yǔ)言,而是算法。

是的,與C語(yǔ)言相比,python語(yǔ)言的運(yùn)行速度非常慢,但這并不是python速度慢的99%。 Python之所以緩慢,是因?yàn)樵S多(即使不是大多數(shù))Python程序員不在乎或不了解他們所做工作對(duì)性能的總體影響。編寫(xiě)網(wǎng)絡(luò)應(yīng)用程序時(shí)基本上可以這樣做,但是如果編寫(xiě)的庫(kù)可供成千上萬(wàn),十萬(wàn)甚至一百萬(wàn)的人使用,則可能會(huì)對(duì)性能產(chǎn)生重大影響。

讓我們看一些Python運(yùn)行緩慢的實(shí)際例子:

此處顯示的工具:

  • pip是用于安裝python庫(kù)的工具
  • virtualenv是用于創(chuàng)建封閉環(huán)境的工具,因此您無(wú)需全局安裝所有軟件包
  • pytest是使用最廣泛的測(cè)試庫(kù)(也許標(biāo)準(zhǔn)庫(kù)中的unittest使用得更多,但至少非常接近)

我之所以選擇這些工具,是因?yàn)檫@是大多數(shù)人與python的首次互動(dòng),而這是我們專(zhuān)業(yè)人士每天與之互動(dòng)的東西。

 
 
 
 
  1. > time pip --version
  2. 0.34 seconds
  3. > time virtualenv -p (which python3) venv
  4. 6.24 seconds
  5. > time pytest  # in an EMPTY directory
  6. 0.32 seconds
  7. > time pip install pytest  # already installed!!!
  8. 0.85 seconds

這些測(cè)量是普遍的,因?yàn)樗鼈兪窃谛颅h(huán)境中且具有熱緩存(我對(duì)具有冷磁盤(pán)緩存的virtualenv進(jìn)行了15秒鐘的測(cè)量)。 如果您的虛擬環(huán)境具有很多依賴(lài)性,那么pip安裝(同樣不做任何事情)的時(shí)間會(huì)增加。 很多。 我在另一個(gè)項(xiàng)目中測(cè)量了2.1秒。

在這里算法才是問(wèn)題,不是python。 我的意思是,當(dāng)我們解決算法問(wèn)題時(shí),語(yǔ)言將成為問(wèn)題,而且它永遠(yuǎn)不可能比更快的語(yǔ)言快,但是我們幾乎與任何地方都差不多。

我對(duì)此不夠強(qiáng)調(diào):python的基本工具鏈比它所需的要慢一個(gè)數(shù)量級(jí)。 有時(shí)更多。

Imports(導(dǎo)入)

在python中導(dǎo)入的慣用方式是個(gè)大問(wèn)題。 在python中使用說(shuō)說(shuō)請(qǐng)求,您確實(shí)會(huì)在文件頂部導(dǎo)入請(qǐng)求,大多數(shù)人會(huì)認(rèn)為這是免費(fèi)的或接近免費(fèi)的。 在python中,它并不是完全免費(fèi)的,實(shí)際上,它要求導(dǎo)入urllib2,這是很慢的部分。 因此,人們認(rèn)為請(qǐng)求的導(dǎo)入是免費(fèi)的,而請(qǐng)求的作者則認(rèn)為urllib2的導(dǎo)入是免費(fèi)的。 到處都是這樣:成千上萬(wàn)的人都認(rèn)為進(jìn)口是免費(fèi)的。 他們不是。

我最??吹降囊环N模式是:

 
 
 
 
  1. try:
  2.     import numpy
  3.     NUMPY_AVAILABLE = True
  4. except ImportError:
  5.     NUMPY_AVAILABLE = False

并且在導(dǎo)入時(shí)運(yùn)行。我們什么時(shí)候在庫(kù)中使用該標(biāo)志?通常從不,并且numpy導(dǎo)入非常昂貴。我的機(jī)器上200ms。因此,對(duì)于您的應(yīng)用程序而言,它的啟動(dòng)性能非常出色,因?yàn)樗墓δ茉趩?dòng)路徑中沒(méi)有使用,在許多情況下根本沒(méi)有使用。

開(kāi)發(fā)時(shí),這非常令人沮喪,因?yàn)槟骄梢栽谡麄€(gè)工作日平均每分鐘重新啟動(dòng)一次該過(guò)程。

我很高興看到一年以前,因此pytz停止在導(dǎo)入時(shí)解析其整個(gè)時(shí)區(qū)數(shù)據(jù)庫(kù)。從Django(可以說(shuō)是最流行的Web框架)的啟動(dòng)開(kāi)始,這節(jié)省了約100毫秒的時(shí)間?,F(xiàn)在考慮一下,這種微小的變化將在10年內(nèi)節(jié)省多少千瓦時(shí)。每次運(yùn)行測(cè)試時(shí),每次啟動(dòng)Web Worker時(shí),都會(huì)在每個(gè)使用Django的站點(diǎn)上進(jìn)行。這僅適用于Django!許多其他庫(kù)和程序都使用pytz。

千紙之死

另一個(gè)問(wèn)題是,人們認(rèn)為“哦,啟動(dòng)時(shí)只有10毫秒,這沒(méi)什么大不了的”,但是如果該啟動(dòng)每天進(jìn)行數(shù)百萬(wàn)次,那將是真實(shí)數(shù)字。對(duì)于進(jìn)口來(lái)說(shuō),這是正確的,但在更多事情上也是如此。后續(xù)問(wèn)題是,人們已經(jīng)引入了100種此類(lèi)減速后,就會(huì)認(rèn)為“僅再增加10毫秒”。因此,現(xiàn)在您只需要在1秒的基礎(chǔ)上再加上10毫秒,即1%。沒(méi)什么大不了的!因此,現(xiàn)在可以再增加10毫秒,這略低于1%。每次您使其變慢時(shí),它就會(huì)變得更便宜(以百分比為單位),以使其變得更慢。

請(qǐng)不要使用這種邏輯!

上面的pip安裝示例是一個(gè)很好的案例研究。從磁盤(pán)加載字典并檢查其是否包含字符串“ pytest”將比python的啟動(dòng)時(shí)間(約30毫秒)少。但這不是pip在做什么,它正在文件系統(tǒng)中運(yùn)行,甚至正在加載python文件以獲取其版本號(hào)(為什么?我沒(méi)有詢(xún)問(wèn)它們!為什么它們?nèi)匀粵](méi)有以有效的格式存儲(chǔ)?)。

在pytest中,我們有一個(gè)類(lèi)似的問(wèn)題,性能回歸已被引入了上千次,但是現(xiàn)在一切都很緩慢,并且沒(méi)有明顯的方法來(lái)擺脫這種情況。我已經(jīng)提供了一些補(bǔ)丁,但是由于我在進(jìn)行優(yōu)化時(shí)進(jìn)行了其他更改,因此我獲得的大部分收益都被抹去了!

最后,我放棄了提交補(bǔ)丁程序,并構(gòu)建了一個(gè)名為hammett的新測(cè)試運(yùn)行程序,該測(cè)試運(yùn)行程序與pytest兼容,但速度更快。我的意思是走得更快。我希望,如果有替代方案,人們可?以看到存在另一個(gè)可能運(yùn)行緩慢的世界。

我們?nèi)绾问筽ython更快?

我們需要關(guān)心這一問(wèn)題。

我們需要了解進(jìn)口不是免費(fèi)的。

我們需要研究整個(gè)生態(tài)系統(tǒng)的基本構(gòu)建模塊,或者解決基本程序和庫(kù)中的性能問(wèn)題,或者替換它們。

我們需要衡量。

一些開(kāi)始的地方:

  • pytest:代替我使用hammett,或敦促pytest的向后兼容性大幅度中斷,以提??高性能
  • pip:至少緩存一些結(jié)果!我應(yīng)該能夠在執(zhí)行每個(gè)命令之前運(yùn)行“ pip install -r requirements.txt”,而不會(huì)注意到它
  • virtualenv:我還沒(méi)有研究過(guò),但是似乎可以寫(xiě)1218個(gè)文件,總計(jì)11.6MB,可以加快速度,或者避免做一些工作
  • 編寫(xiě)基準(zhǔn):這可能是最簡(jiǎn)單的。例如,您可以將工具與其他語(yǔ)言的同類(lèi)工具進(jìn)行基準(zhǔn)測(cè)試。我們至少應(yīng)該知道我們是否比例如java慢一百倍。

更新:

事實(shí)證明,virtualenv家伙已經(jīng)在此之上了!現(xiàn)在,版本20需要0.8秒才能完成與之前花費(fèi)6.4相同的任務(wù)。為此,virtualenv團(tuán)隊(duì)值得高度贊揚(yáng)!

原文網(wǎng)址:https://kodare.net/2020/05/19/python-is-slow-does-not-have-to-be.html


新聞名稱(chēng):Python很慢?不一定哦
網(wǎng)站URL:http://uogjgqi.cn/article/djdsgoo.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流