内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

實(shí)現(xiàn)更快的python核心編碼技巧有哪些-創(chuàng)新互聯(lián)

本篇內(nèi)容介紹了“實(shí)現(xiàn)更快的python核心編碼技巧有哪些”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)公司主打移動網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護(hù)、域名與空間、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實(shí)力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再決定采用什么樣的設(shè)計(jì)。最后,要實(shí)現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計(jì),我們還會規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。

1。Memoize(緩存)重復(fù)使用的數(shù)據(jù)

當(dāng)你能做到一次并保存結(jié)果時,千萬不要做一千次工作。如果有一個經(jīng)常調(diào)用的函數(shù)返回可預(yù)測的結(jié)果,那么python為您提供了將結(jié)果緩存到內(nèi)存中的選項(xiàng)。返回相同結(jié)果的后續(xù)調(diào)用幾乎會立即返回。

各種各樣的例子展示了如何做到這一點(diǎn);我最喜歡的記憶幾乎是最少的。python的一個本機(jī)庫functools具有@functools.lru緩存裝飾器,它緩存最近對函數(shù)的n個調(diào)用。當(dāng)正在緩存的值發(fā)生變化,但在特定的時間窗口內(nèi)是相對靜態(tài)的時,這很方便。一天中最新使用的項(xiàng)目列表就是一個很好的例子。

2。將數(shù)學(xué)移動到numpy

如果您正在進(jìn)行基于矩陣或數(shù)組的數(shù)學(xué)運(yùn)算,并且不希望Python解釋器妨礙您的工作,請使用numpy。通過利用C庫進(jìn)行繁重的工作,numpy提供了比本機(jī)python更快的數(shù)組處理。它還比Python的內(nèi)置數(shù)據(jù)結(jié)構(gòu)更有效地存儲數(shù)字?jǐn)?shù)據(jù)。

相對來說,非異類的數(shù)學(xué)也可以被numpy大大加快。該包為許多常見的python數(shù)學(xué)操作(如min和max)提供了替換,這些操作的速度比原來的python快很多倍。

numpy的另一個好處是更有效地使用大型對象的內(nèi)存,比如擁有數(shù)百萬個項(xiàng)目的列表。一般來說,像numpy中那樣的大型對象如果用傳統(tǒng)的python來表示,則占用大約四分之一的內(nèi)存。請注意,它有助于從作業(yè)的正確數(shù)據(jù)結(jié)構(gòu)開始,即優(yōu)化本身。

重寫python算法以使用numpy需要一些工作,因?yàn)閿?shù)組對象需要使用numpy的語法聲明。但是numpy在實(shí)際的數(shù)學(xué)運(yùn)算中使用了python現(xiàn)有的習(xí)語(+、-,等等),所以從長遠(yuǎn)來看,切換到numpy并不會太令人迷惑。

3。使用C庫

numpy使用C語言編寫的庫是一種很好的模擬策略。如果有一個現(xiàn)有的C庫可以滿足您的需要,那么Python及其生態(tài)系統(tǒng)提供了幾個選項(xiàng)來連接到該庫并利用其速度。

最常見的方法是使用Python的CTypes庫。因?yàn)閏types與其他python應(yīng)用程序(和運(yùn)行時)廣泛兼容,所以它是最佳的開始位置,但它遠(yuǎn)不是鎮(zhèn)上唯一的游戲。cffi項(xiàng)目為c.cython提供了一個更優(yōu)雅的接口(見下文),也可以用來包裝外部庫,盡管代價(jià)是必須學(xué)習(xí)cython的標(biāo)記。

4。與多處理并行

傳統(tǒng)的python應(yīng)用程序——那些在cpython中實(shí)現(xiàn)的應(yīng)用程序——一次只執(zhí)行一個線程,以避免在使用多個線程時出現(xiàn)狀態(tài)問題。這是臭名昭著的全球口譯員鎖(gil)。它的存在有充分的理由,這并沒有使它變得更加華麗。

隨著時間的推移,gil的效率顯著提高(運(yùn)行python 3而不是python 2的另一個原因),但核心問題仍然存在。一個cpython應(yīng)用程序可以是多線程的,但是cpython不允許這些線程在多個核心上并行運(yùn)行。

為了解決這個問題,python提供了多處理模塊來在不同的核心上運(yùn)行python解釋器的多個實(shí)例。狀態(tài)可以通過共享內(nèi)存或服務(wù)器進(jìn)程來共享,數(shù)據(jù)可以通過隊(duì)列或管道在進(jìn)程實(shí)例之間傳遞。

您仍然需要在進(jìn)程之間手動管理狀態(tài)。另外,在啟動多個Python實(shí)例并在其中傳遞對象的過程中,不會有太多的開銷。但是對于長期運(yùn)行的進(jìn)程來說,多處理庫是非常有用的,因?yàn)樗梢詮目绾诵牡牟⑿行灾蝎@益。

另外,使用C庫的python模塊和包(如numpy)完全避免使用gil。這也是他們被推薦提速的另一個原因。

5。知道你的庫在做什么

簡單地輸入XYZ并利用無數(shù)其他程序員的工作是多么方便!但是您需要知道,第三方庫可以改變應(yīng)用程序的性能,而不是總是為了更好。

有時,這以明顯的方式表現(xiàn)出來,例如當(dāng)來自特定庫的模塊構(gòu)成瓶頸時。(再次強(qiáng)調(diào),剖析會有所幫助。)有時情況不那么明顯。示例:Pyglet是一個用于創(chuàng)建窗口化圖形應(yīng)用程序的簡便庫,它自動啟用調(diào)試模式,這會顯著影響性能,直到顯式禁用它為止。除非您閱讀文檔,否則您可能永遠(yuǎn)不會意識到這一點(diǎn)。閱讀并被告知。

6。注意平臺

python運(yùn)行跨平臺,但這并不意味著每個操作系統(tǒng)(windows、linux、os x)的特性都是在python下抽象出來的。大多數(shù)時候,這意味著要了解平臺的具體情況,比如路徑命名約定,對于這些約定,有助手函數(shù)。

但在性能方面,了解平臺差異也很重要。例如,在Windows上,需要計(jì)時器精度小于15毫秒(例如,對于多媒體)的python腳本將需要使用Windows API調(diào)用來訪問高分辨率計(jì)時器或提高計(jì)時器分辨率。

7。與PyPy同行

cpython是Python最常用的實(shí)現(xiàn),它將兼容性優(yōu)先于原始速度。對于那些想把速度放在首位的程序員來說,有pypy,一個配備了jit編譯器的python實(shí)現(xiàn)來加速代碼執(zhí)行。

因?yàn)閜ypy是作為cpython的替代品而設(shè)計(jì)的,所以它是快速提高性能的最簡單方法之一。許多常見的python應(yīng)用程序?qū)⒃趐ypy上運(yùn)行。一般來說,應(yīng)用程序越依賴于“普通”的python,就越有可能在pypy上運(yùn)行而不進(jìn)行修改。

然而,充分利用PYPY可能需要測試和研究。您會發(fā)現(xiàn)長時間運(yùn)行的應(yīng)用程序從Pypy獲得大的性能收益,因?yàn)榫幾g器會分析一段時間后的執(zhí)行情況。對于運(yùn)行和退出的短腳本,您最好使用cpython,因?yàn)樾阅芴嵘蛔阋钥朔﨡IT的開銷。

請注意,pypy對python 3的支持仍然落后于幾個版本;它目前支持python 3.2.5。使用最新的python特性(如async和await-co例程)的代碼將無法工作。最后,使用ctypes的python應(yīng)用程序的行為可能并不總是如預(yù)期的那樣。如果您正在編寫可能同時在pypy和cpython上運(yùn)行的東西,那么為每個解釋器分別處理用例可能是有意義的。

其他通過抖動加速python的實(shí)驗(yàn)仍在取得成果。其中包括一個微軟項(xiàng)目pyjion,它為cpython提供了一個JIT接口。微軟提供了自己的JIT作為概念證明。

8。升級至python 3

如果您使用的是python 2.x,并且沒有覆蓋的原因(比如不兼容的模塊)來堅(jiān)持使用它,那么您應(yīng)該跳到python 3。

除了python 3作為語言的未來,python 3中還提供了許多構(gòu)造和優(yōu)化,而python 2.x中沒有這些構(gòu)造和優(yōu)化。例如,python 3.5通過將async和wait關(guān)鍵字作為語言語法的一部分來減少異步編程的麻煩。python 3.2對全局解釋器鎖進(jìn)行了重大升級,顯著改進(jìn)了python處理多個線程的方式。

“實(shí)現(xiàn)更快的python核心編碼技巧有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

名稱欄目:實(shí)現(xiàn)更快的python核心編碼技巧有哪些-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://m.rwnh.cn/article20/iioco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站制作、App設(shè)計(jì)、品牌網(wǎng)站建設(shè)、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
裕民县| 凤阳县| 古浪县| 东兰县| 兴隆县| 海安县| 乌兰察布市| 仪征市| 庆元县| 古丈县| 会宁县| 奎屯市| 聂拉木县| 正镶白旗| 沧源| 潞城市| 弥渡县| 务川| 莱阳市| 丘北县| 台北县| 乐安县| 中方县| 宽甸| 尼木县| 富蕴县| 怀远县| 庄河市| 巫山县| 贵定县| 钟祥市| 蒙山县| 兰考县| 九江市| 洛川县| 新安县| 张家港市| 阜阳市| 兴义市| 四川省| 青铜峡市|