99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀人們對(duì)Python在企業(yè)級(jí)開發(fā)中的10大誤解
人們對(duì)Python在企業(yè)級(jí)開發(fā)中的10大誤解
2016-03-22
收藏
在PayPal的編程文化中存在著大量的語(yǔ)言多元化。除了長(zhǎng)期流行的C++和Java,越來(lái)越多的團(tuán)隊(duì)選擇JavaScript和Scala,Braintree的收購(gòu)也推出了成熟的Ruby社區(qū)。

有一種特別的語(yǔ)言,它在eBay和PayPal有很長(zhǎng)的歷史,在開發(fā)者心中的地位也在日漸提高,這種語(yǔ)言就是:Python

多年來(lái),Python一直得到eBay開發(fā)人員的廣泛使用和支持。甚至在官方管理層支持以前,技術(shù)人員就開始使用Python,并從中受益。多年前,我加入PayPal,并選擇Python來(lái)編寫內(nèi)部應(yīng)用程序,但我發(fā)現(xiàn)在PayPal的一些產(chǎn)品中,Python代碼存在已有15年之久了。

現(xiàn)在,Python掌控了超過(guò)50個(gè)項(xiàng)目,包括:

· 功能和產(chǎn)品,如eBay Now和RedLaser

· 運(yùn)營(yíng)和基礎(chǔ)設(shè)施,既有OpenStack,也有專屬產(chǎn)品

· 中間層服務(wù)和應(yīng)用程序,如設(shè)置PayPal的價(jià)格和顧客的功能審查

· 監(jiān)控代理和接口,用于多種部署和安全用例

· 數(shù)據(jù)導(dǎo)入的批量作業(yè),價(jià)格調(diào)整等等

還有太多的開發(fā)工具沒(méi)有計(jì)入eBay/PayPal的Python社區(qū),2011年只有25名工程師,而2014年這個(gè)數(shù)字已經(jīng)超過(guò)了260。接下來(lái)的一系列文章,我會(huì)詳細(xì)介紹促進(jìn)Python社區(qū)發(fā)展的舉措和技術(shù)。對(duì)于這篇介紹性文章,我會(huì)專注于人們對(duì)Python的10個(gè)誤解,它們中大多數(shù),我都已經(jīng)在eBay和PayPal的企業(yè)級(jí)環(huán)境中對(duì)它的真相予以揭穿。

誤解1: Python是一門新的語(yǔ)言

今天,伴隨著大多初創(chuàng)企業(yè)使用的使用,同時(shí)兒童也在進(jìn)行學(xué)習(xí),我們不難發(fā)現(xiàn)這種誤解仍然在持續(xù)。事實(shí)上,Python已經(jīng)有超過(guò)23年的歷史了,它的第一個(gè)公開版本發(fā)布于1991年,比HTTP 1.0早了5年,比JAVA早了4年。Python一個(gè)著名的早期使用的例子是1996年Google的第一個(gè)成功的網(wǎng)絡(luò)爬蟲。

如果你對(duì)Python悠久的歷史感到好奇,Python語(yǔ)言的創(chuàng)立者吉多·范羅蘇姆(Guido van Rossum)會(huì)向你詳細(xì)講述關(guān)于Python的整個(gè)故事。

誤解2:Python沒(méi)有被編譯

Python不像C++需要單獨(dú)的編譯器工具鏈,它更像Java和其它編譯型語(yǔ)言,會(huì)將代碼編譯成字節(jié)碼。進(jìn)一步的編譯步驟,如果有的話,是在程序運(yùn)行時(shí)決定的,并由CPython, PyPy, Jython/JVM, IronPython/CLR或其它進(jìn)程虛擬機(jī)來(lái)完成。更多信息參見誤解#6。

PayPal和其它地方的一般原則是,安全不能依靠編譯狀態(tài)的代碼,更重要的是使運(yùn)行環(huán)境更安全。因?yàn)樵诒举|(zhì)上,每種語(yǔ)言都有反匯編器或可以被破解的特性,這一特性會(huì)破壞程序的保護(hù)狀態(tài)??匆豢聪乱粋€(gè)誤解,我們能夠了解更多Python的安全內(nèi)容。

誤解 3:Python不安全

Python與輕量級(jí)的密切關(guān)系也許不會(huì)讓它看起來(lái)非常強(qiáng)大,但恰恰是這種直覺會(huì)給人誤解。安全的一個(gè)核心原則是盡可能小的呈現(xiàn)目標(biāo)。大系統(tǒng)趨向于過(guò)度集中化的行為,以及對(duì)開發(fā)者理解力的削弱,使得它是反安全的。Python的簡(jiǎn)單高效輕松的解決了這個(gè)問(wèn)題。此外,CPython通過(guò)簡(jiǎn)單的、穩(wěn)定的和易于審計(jì)的虛擬機(jī)來(lái)解決這些問(wèn)題。事實(shí)上,在Coverity軟件最近的一個(gè)分析中,CPython得到了最高的質(zhì)量評(píng)價(jià)。

Python還具有一系列廣泛開源的、行業(yè)標(biāo)準(zhǔn)的安全庫(kù)。在PayPal,我們對(duì)安全和信任絲毫不敢馬虎。我們發(fā)現(xiàn),將hashlib,PyCrypto和OpenSSL結(jié)合在一起,通過(guò)PyOpenSSL,以及我們自定義的捆綁,已經(jīng)覆蓋了PayPal的各種安全和性能需求。

綜合這些原因,我們已經(jīng)可以看到一些在PayPal(eBay)的應(yīng)用安全組中使用Python并被快速采用的例子。下面給出一些在PayPal最重要的環(huán)境中利用Python的基于安全應(yīng)用的例子。



誤解4:Python是一門腳本語(yǔ)言

Python確實(shí)可以作為腳本語(yǔ)言使用,而且還是這個(gè)領(lǐng)域的先行者之一,因?yàn)樗Z(yǔ)法簡(jiǎn)單,支持跨平臺(tái),并且普遍存在于Linux,Macs和其它Unix機(jī)器中。

事實(shí)上,Python可能是通用編程語(yǔ)言中最靈活的技術(shù)之一。下面列出一部分例子:



更不用說(shuō)大量的網(wǎng)站和網(wǎng)絡(luò)服務(wù)器。事實(shí)上,PayPal工程師似乎都有一個(gè)嗜好,喜歡從事一些基于Python的門戶網(wǎng)站的開發(fā),如YuTube和Yelp。從官方的名單中,可以列舉出更多關(guān)于Python成功的應(yīng)用。

誤解 5: Python是弱類型的

強(qiáng)大的動(dòng)態(tài)類型是Python類型系統(tǒng)的特點(diǎn)。維基百科上有更詳細(xì)的解釋。

這不是比賽,但做為一個(gè)有趣的事實(shí),Python具有比Java更強(qiáng)的類型系統(tǒng)。Java的原語(yǔ)和對(duì)象有各自的類型系統(tǒng),Null存在于一種灰色地帶。而另一方面,Python有一個(gè)統(tǒng)一的強(qiáng)類型系統(tǒng),None這種類型也有明確的定義。此外,Java虛擬機(jī)本身也是動(dòng)態(tài)類型,它可以追溯到SUN公司收購(gòu)的Smaltalk虛擬機(jī)的實(shí)現(xiàn)。

Python的類型系統(tǒng)非常友好,但對(duì)于企業(yè)的使用,還有更需要關(guān)注的問(wèn)題。

誤解 6: Python速度慢

首先,很重要的一點(diǎn)是:Python是一種編程語(yǔ)言,不是一個(gè)運(yùn)行環(huán)境。下面列舉幾種Python的主要實(shí)現(xiàn):

CPython是參考實(shí)現(xiàn),它的分布和使用也最為廣泛。

Jython是一種成熟的實(shí)現(xiàn),是在Java虛擬機(jī)上使用的Python。

IronPython是用微軟的公共語(yǔ)言庫(kù)即.NET實(shí)現(xiàn)的Python語(yǔ)言。

PyPy是一種很有前途的Python語(yǔ)言的實(shí)現(xiàn),具有一些高級(jí)特性,如JIT編譯器,增量垃圾收集等等。

每種運(yùn)行時(shí)都有它自身的性能特點(diǎn),它們中沒(méi)有一個(gè)本身是慢的。更重要的一點(diǎn)是這里存在一個(gè)錯(cuò)誤,即對(duì)一種編程語(yǔ)言進(jìn)行性能評(píng)估。應(yīng)該對(duì)一個(gè)應(yīng)用程序,最好是針對(duì)一個(gè)特定的用例進(jìn)行評(píng)估。

為了使問(wèn)題更明確,這里篩選了幾個(gè)案例來(lái)說(shuō)明Python有非常大的性能優(yōu)勢(shì):

使用NumPy作為英特爾公司數(shù)學(xué)核心函數(shù)單指令多數(shù)據(jù)的接口

PyPy的JIT編譯器達(dá)到了比C語(yǔ)言更快的性能

Disqus的用戶規(guī)模從2.5億增長(zhǎng)到5億,一直都是使用同樣的100臺(tái)服務(wù)器

誠(chéng)然,這些都不是最新的例子,只是我最喜歡的,因?yàn)檫@將很容易扯到高性能Python和獨(dú)特運(yùn)行時(shí)的廣闊世界。我們應(yīng)該將注意力應(yīng)該轉(zhuǎn)移到一些通用的,影響開發(fā)者提高最終產(chǎn)品性能的問(wèn)題上,尤其是企業(yè)級(jí)環(huán)境上,而不是解決單個(gè)特殊的問(wèn)題。

C++與Python的對(duì)比,兩種語(yǔ)言,同一輸出

只要有足夠的時(shí)間,一個(gè)受過(guò)訓(xùn)練的開發(fā)人員可以執(zhí)行唯一行之有效的方法,從而獲得準(zhǔn)確的高性能的軟件:

工程師的正確行為,包括相應(yīng)的測(cè)試開發(fā)
概括和測(cè)量性能,識(shí)別瓶頸
優(yōu)化,適當(dāng)考慮測(cè)試套件和阿姆達(dá)爾定律,同時(shí)利用Python在C語(yǔ)言方面強(qiáng)大的根源關(guān)系。

這也許聽起來(lái)簡(jiǎn)單,但即使對(duì)于經(jīng)驗(yàn)豐富的工程師,這也是一個(gè)非常耗時(shí)的過(guò)程。Python從設(shè)計(jì)之初就充分考慮過(guò)開發(fā)者的時(shí)間表。根據(jù)我們的經(jīng)驗(yàn),Python項(xiàng)目經(jīng)受3次甚至更多的迭代并不稀罕,而同樣的時(shí)間,C++或Java項(xiàng)目只需要做一次。今天,PayPal和eBay已經(jīng)看到了多個(gè)成功的案例,Python項(xiàng)目超越了C++和Java的同行,使用更少的代碼,這一切都得益于快的開發(fā)時(shí)間可以進(jìn)行仔細(xì)的裁剪和優(yōu)化。你應(yīng)該知道這些有趣的內(nèi)容。

誤解 7: Python不能擴(kuò)展

關(guān)于擴(kuò)展有多種定義,但無(wú)論哪種,YouTube都是一個(gè)可擴(kuò)展的網(wǎng)站。每月都有超過(guò)10億的獨(dú)立訪客,每分鐘上傳超過(guò)100小時(shí)的視頻,占用20%的互聯(lián)網(wǎng)絡(luò)峰值帶寬,這些都用Python作為核心技術(shù)。Dropbox,Disqus,Eventbrite,RedTwilio,Instagram,Yelp,EVE Online, Second Life, 是的,還有eBay和PayPal,這些案例證明Python的擴(kuò)展性不僅僅只是可能,還是一種模式。

簡(jiǎn)單性和一致性是成功的關(guān)鍵。CPython這個(gè)基本的Python虛擬機(jī),使這些特征最大化,同時(shí)也使運(yùn)行時(shí)間可以預(yù)測(cè)。很難看到Python程序員關(guān)注垃圾收集中止或應(yīng)用程序啟動(dòng)時(shí)間。隨著強(qiáng)大的平臺(tái)和網(wǎng)絡(luò)支持,Python自然地適應(yīng)了智能的橫向可伸縮性,主要表現(xiàn)在像BitTorrent這樣的系統(tǒng)中。

此外,伸縮性是與所有測(cè)量和迭代有關(guān)。Python建立的初衷是分析與優(yōu)化。誤解6可以找到更多關(guān)于如何垂直擴(kuò)展Python的內(nèi)容。

誤解 8: Python缺乏好的并發(fā)性支持

在消除了性能和伸縮性的誤解后,一些人試圖從技術(shù)方面來(lái)置疑Python,“Python缺乏并發(fā)性”,或者,“Python的GIL怎么樣?”,如果數(shù)十個(gè)反例還不足以支撐一個(gè)人對(duì)Python在水平和垂直方面的擴(kuò)展能力的信心,那么對(duì)CPython的詳細(xì)實(shí)現(xiàn)展開來(lái)解釋也沒(méi)有什么幫助,所以我只進(jìn)行簡(jiǎn)單的說(shuō)明。

Python有大量的并發(fā)性原語(yǔ),包括generators,greenlets,Deferreds和futures。Python有非常多的并發(fā)性框架,包括eventlet,gevent和Twisted。目前已有大量的工作投入到了為并發(fā)性定制運(yùn)行時(shí)間,包括Stackless和PyPy。所有這些以及更多的案例表明有效地使用Python進(jìn)行并發(fā)編程不乏其人。所有這些企業(yè)級(jí)的產(chǎn)品都得到了官方支持和使用。例子可以參考誤解7。

全局解釋器鎖或GIL是在Python大多數(shù)使用情況下的性能優(yōu)化,也是CPython 代碼在開發(fā)中的易用性優(yōu)化。GIL可以讓操作系統(tǒng)的線程或綠色線程使用起來(lái)更容易,同時(shí)不影響多進(jìn)程的使用。更多信息可以參考這個(gè)主題的Q&A和Python文檔的綜述。

在PayPal,一個(gè)典型的業(yè)務(wù)配置需要多臺(tái)機(jī)器承擔(dān),采用多進(jìn)程,多線程,和大量的綠色線程,達(dá)到一個(gè)非常強(qiáng)大和可擴(kuò)展性的并行環(huán)境(見下圖)。在大多數(shù)企業(yè)級(jí)環(huán)境中,當(dāng)事人出于謹(jǐn)慎和災(zāi)難居處的目的,傾向于選擇一個(gè)非常高的配置。然而,在某些情況下,仍然能看到Python服務(wù)器每天每臺(tái)機(jī)器有數(shù)百萬(wàn)次的請(qǐng)求,但它們都可以輕松的處理。

一個(gè)處在基于協(xié)同的異步架構(gòu)內(nèi)的工作草圖,最外面的盒子是一個(gè)進(jìn)程,下一級(jí)是線程,在線程內(nèi)是“綠色線程”。操作系統(tǒng)處理線程間的搶占,I/O協(xié)同是合作的。



誤解 9: Python程序員稀缺

這個(gè)誤解有一些道理。Python的網(wǎng)頁(yè)開發(fā)工程師不如PHP和Java那么多。這可能是由于行業(yè)需求和教育的聯(lián)動(dòng)導(dǎo)致的,但教育趨勢(shì)表明這很有可能會(huì)被改變。

即便如此,Python開發(fā)者并不稀缺。全世界有數(shù)以百萬(wàn)計(jì)的Python開發(fā)人員,幾十個(gè)Python會(huì)議,StackOveflow上幾萬(wàn)個(gè)Python相關(guān)的問(wèn)題,一些公司,如YouTube,美國(guó)銀行,和LucasArts/Dreamworks雇用了成千上萬(wàn)的Python開發(fā)人員。在eBay和PayPal,我們有數(shù)百名開發(fā)人員經(jīng)常使用Python,為什么會(huì)這樣呢?

一個(gè)項(xiàng)目創(chuàng)建的時(shí)候?yàn)槭裁催x擇Python?Python非常容易學(xué)習(xí),而且對(duì)孩子,大學(xué)生和在職人員來(lái)說(shuō)也是首選編程語(yǔ)言。在eBay,對(duì)一個(gè)新Python程序員來(lái)說(shuō),只需要一周時(shí)間,他就能夠初見成效,往往在2到3個(gè)月就可以大放異彩,互聯(lián)網(wǎng)上豐富的互動(dòng)式教程,書籍,文檔和開源的代碼庫(kù),使這一些變得可能。

另一個(gè)重要因素是使用Python的項(xiàng)目比其它項(xiàng)目需要的開發(fā)人員要少。正如誤解6和9中所說(shuō)的,像Instagram這樣的精干、高效的團(tuán)隊(duì),在Python項(xiàng)目中已成為一個(gè)常見的比喻,這也無(wú)疑是我們?cè)趀Bay和PayPal的經(jīng)驗(yàn)。

誤解 10: Python不適合做大項(xiàng)目

誤解7中討論了Python項(xiàng)目在運(yùn)行時(shí)的擴(kuò)展性,但Python項(xiàng)目在開發(fā)中的擴(kuò)展性又怎樣呢?如誤解9中提到的,Python項(xiàng)目的人員不是很多。然而,Instagram達(dá)到每天億萬(wàn)次的點(diǎn)擊和數(shù)10億美元,整個(gè)公司仍然只有一組數(shù)十人的團(tuán)隊(duì)。Dropbox在2011年僅有70名工程師,其它Python團(tuán)隊(duì)的情況也很類似,人員不多。所以Python可以擴(kuò)展到一個(gè)很大的團(tuán)隊(duì)嗎?

美國(guó)銀行實(shí)際上有超過(guò)5000名Python的開發(fā)人員,一個(gè)單獨(dú)的Python項(xiàng)目有超過(guò)千萬(wàn)行Python代碼。摩根大通經(jīng)歷了相似的轉(zhuǎn)變。YouTube也有數(shù)千名工程師和數(shù)百萬(wàn)行代碼。大的產(chǎn)品和大的團(tuán)隊(duì)每天都使用Python,它們具有卓越的模塊化和封裝特性,超過(guò)某一特定點(diǎn)后,通用開發(fā)規(guī)?;颈3植蛔?。工具、強(qiáng)的約定和代碼評(píng)審使大的項(xiàng)目易于管理。

幸運(yùn)的是,Python始于一個(gè)好基線。在提交代碼前,我們使用PyFlakes和其它工具去執(zhí)行Python代碼的靜態(tài)分析,同時(shí)也堅(jiān)持PEP8,即Python語(yǔ)言的風(fēng)格指南。

最后,需要注意的是,除了誤解6和7中提到的調(diào)度的明顯變化外,使用Python的項(xiàng)目也需要更少的開發(fā)人員。我們最常見的成功案例是,一個(gè)Java或C++項(xiàng)目,預(yù)計(jì)需要一個(gè)3-5人的開發(fā)團(tuán)隊(duì),2-6周的時(shí)間,最終由一名受到激勵(lì)的開發(fā)人員僅用2-6周(或小時(shí))完成這個(gè)項(xiàng)目。

這是一個(gè)奇跡,但也是現(xiàn)代發(fā)展的事實(shí),并且通常是商業(yè)競(jìng)爭(zhēng)的必需品。

干凈的狀態(tài)

誤解可以作為有趣的消遣。圍繞這些誤解的討論仍然是一些最積極和有意義的事情,包括內(nèi)部的和外部的,因?yàn)閺拿恳粋€(gè)誤解中都能認(rèn)識(shí)到Python的優(yōu)勢(shì)。同時(shí)也要記住,那些表面上看起來(lái)繁瑣和麻煩的事情常常是興趣穩(wěn)步增長(zhǎng)的表現(xiàn),隨著各行業(yè)穩(wěn)定的流入,帶來(lái)了持續(xù)的教育工作。希望這篇文章可以撲滅一場(chǎng)火焰戰(zhàn)爭(zhēng),能夠談?wù)撘粌蓚€(gè)用Python實(shí)現(xiàn)的項(xiàng)目。
翻譯 | Damon
來(lái)源 | 伯樂(lè)在線
http://python.jobbole.com/80936/

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }