網(wǎng)站性能檢測(cè)評(píng)分
注:本網(wǎng)站頁(yè)面html檢測(cè)工具掃描網(wǎng)站中存在的基本問(wèn)題,僅供參考。
python項(xiàng)目發(fā)布
GitHub上超9Kstars的Python爬蟲(chóng)項(xiàng)目——pyspider(國(guó)人編寫) 行業(yè)視頻課程
A Powerful Spider(Web Crawler) System in Python.
簡(jiǎn)介
PySpider:一個(gè)國(guó)人編寫的強(qiáng)大的網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)并帶有強(qiáng)大的WebUI。采用Python語(yǔ)言編寫,分布式架構(gòu),支持多種數(shù)據(jù)庫(kù)后端,強(qiáng)大的WebUI支持腳本編輯器,任務(wù)監(jiān)視器,項(xiàng)目管理器以及結(jié)果查看器。
特性
python 腳本控制,可以用任何你喜歡的html解析包(內(nèi)置 pyquery)
WEB 界面編寫調(diào)試腳本,起停腳本,監(jiān)控執(zhí)行狀態(tài),查看活動(dòng)歷史,獲取結(jié)果產(chǎn)出
數(shù)據(jù)存儲(chǔ)支持MySQL, MongoDB, Redis, SQLite, Elasticsearch; PostgreSQL 及 SQLAlchemy
隊(duì)列服務(wù)支持RabbitMQ, Beanstalk, Redis 和 Kombu
支持抓取 JavaScript 的頁(yè)面
組件可替換,支持單機(jī)/分布式部署,支持 Docker 部署
強(qiáng)大的調(diào)度控制,支持超時(shí)重爬及優(yōu)先級(jí)設(shè)置
支持python2&3
快速入門
安裝
如果你使用 ubuntu請(qǐng)先安裝以下依賴包:apt-get install python python-dev python-distribute python-pip libcurl4-openssl-dev libxml2-dev libxslt1-dev python-lxml如果需要調(diào)用js解析框架,請(qǐng)先照著phantomjs官網(wǎng)說(shuō)明安裝phantomjs應(yīng)用,并把可執(zhí)行程序添加到系統(tǒng)環(huán)境變量PATH中以方便調(diào)用。
注意:本程序在WINDOWNS系統(tǒng)中運(yùn)行問(wèn)題比較多,作者也沒(méi)有對(duì)win系統(tǒng)做兼容性測(cè)試.如果沒(méi)有特別強(qiáng)的解決問(wèn)題的能力不建議用WINDOWS類系統(tǒng).
以上安裝完成后,執(zhí)行以下命令安裝pyspider
pip install pyspider
啟動(dòng)環(huán)境
安裝完成后運(yùn)行以下命令運(yùn)行pyspider程序
#pyspider
注意:pyspider命令默認(rèn)會(huì)以all模式運(yùn)行所有的組件,方便調(diào)試。作者建議在線上模式分開(kāi)部署各各組件,詳情請(qǐng)查看部署章節(jié)
運(yùn)行成功后用瀏覽器打開(kāi)http://localhost:5000/訪問(wèn)控制臺(tái)
編寫腳本
在web控制臺(tái)點(diǎn)create按鈕新建任務(wù),項(xiàng)目名自定義。本例項(xiàng)目名為test。
保存后打開(kāi)代碼編輯器(代碼編輯器默認(rèn)有簡(jiǎn)單的實(shí)例代碼)
右側(cè)就是代碼編輯器,以后可以直接在這添加修改代碼。本實(shí)例就直接使用以自帶的代碼吧。代碼如下
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2015-10-08 12:45:44
# Project: test
from pyspider.libs.base_handler import *
class Handler(BaseHandler):
crawl_config = {
}
@every(minutes=24 * 60)
def on_start(self):
self.crawl('http://scrapy.org/', callback=self.index_page)
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
for each in response.doc('a[href^="http"]').items():
self.crawl(each.attr.href, callback=self.detail_page)
@config(priority=2)
def detail_page(self, response):
return {
"url": response.url,
"title": response.doc('title').text(),
代碼簡(jiǎn)單分析:
def on_start(self) 方法是入口代碼。當(dāng)在web控制臺(tái)點(diǎn)擊run按鈕時(shí)會(huì)執(zhí)行此方法。
self.crawl(url, callback=self.index_page)這個(gè)方法是調(diào)用API生成一個(gè)新的爬取任務(wù),這個(gè)任務(wù)被添加到待抓取隊(duì)列。
def index_page(self, response) 這個(gè)方法獲取一個(gè)Response對(duì)象。 response.doc是pyquery對(duì)象的一個(gè)擴(kuò)展方法。pyquery是一個(gè)類似于jQuery的對(duì)象選擇器。
def detail_page(self, response)返回一個(gè)結(jié)果集對(duì)象。這個(gè)結(jié)果默認(rèn)會(huì)被添加到resultdb數(shù)據(jù)庫(kù)(如果啟動(dòng)時(shí)沒(méi)有指定數(shù)據(jù)庫(kù)默認(rèn)調(diào)用sqlite數(shù)據(jù)庫(kù))。你也可以重寫on_result(self,result)方法來(lái)指定保存位置。
更多知識(shí):
@every(minutes=24*60, seconds=0) 這個(gè)設(shè)置是告訴scheduler(調(diào)度器)on_start方法每天執(zhí)行一次。
@config(age=10 * 24 * 60 * 60) 這個(gè)設(shè)置告訴scheduler(調(diào)度器)這個(gè)request(請(qǐng)求)過(guò)期時(shí)間是10天,10天內(nèi)再遇到這個(gè)請(qǐng)求直接忽略。這個(gè)參數(shù)也可以在self.crawl(url, age=10*24*60*60) 和 crawl_config中設(shè)置。
@config(priority=2) 這個(gè)是優(yōu)先級(jí)設(shè)置。數(shù)字越大越先執(zhí)行。
執(zhí)行任務(wù)
當(dāng)您完成腳本編寫,調(diào)試無(wú)誤后,請(qǐng)先保存您的腳本!然后返回到控制臺(tái)首頁(yè)。
直接點(diǎn)擊項(xiàng)目狀態(tài)status那欄,把狀態(tài)由TODO改成debug或running。
最后點(diǎn)擊項(xiàng)目最右邊那個(gè)RUN按鈕啟動(dòng)項(xiàng)目。
當(dāng)progress那欄有數(shù)據(jù)顯示說(shuō)明啟動(dòng)成功。到現(xiàn)在就可以點(diǎn)最右側(cè)的results查看結(jié)果了。
項(xiàng)目地址:https://github/binux/pyspider
近期好文
Python最全入門資源(學(xué)習(xí)課程、博客、開(kāi)發(fā)環(huán)境)
Python項(xiàng)目實(shí)戰(zhàn)——開(kāi)發(fā)網(wǎng)易云音樂(lè)插件
Python小項(xiàng)目——使用Python寫詩(shī)
2017年最流行的十大Python庫(kù) 流量視頻課程
年末是你需要思考過(guò)去一年的成就的時(shí)候。對(duì)于程序員來(lái)說(shuō),這通常是回顧今年發(fā)布的或者最近流行的開(kāi)源庫(kù),因?yàn)樗鼈兪墙鉀Q特定問(wèn)題的絕佳工具。
在過(guò)去的兩個(gè)多年中,我們都會(huì)在博客中選取我們認(rèn)為在Python社區(qū)最有用的庫(kù)。今年也是如此。
這一次,這份列表基本都是機(jī)器學(xué)習(xí)(ML)的庫(kù)。請(qǐng)非ML庫(kù)的作者而且能夠諒解,這都怪我們的偏見(jiàn)。希望在讀到本文的人能評(píng)論并提出一些被我們忽略的偉大的庫(kù)幫助我們矯正它。
那么,讓我們開(kāi)始盤點(diǎn)吧!
1. Pipenv
鏈接:https://github/pypa/pipenv
我們?yōu)榻衲昴瓿醢l(fā)布的這個(gè)工具排到榜首,它有能力影響每個(gè)Python開(kāi)發(fā)者的工作流程,它已經(jīng)成為Python管理依賴項(xiàng)的官方推薦工具。
https://packaging.python.org/tutorials/managing-dependencies/#installing-pipenv
Pipenv最初是由Kenneth Reitz創(chuàng)立的一個(gè)周末項(xiàng)目,旨在將其他包管理者(如npm或yarn)的創(chuàng)意帶入Python中。不再去安裝virtualenv,virtualenvwrapper,管理requirements.txt文件,并確保對(duì)依賴項(xiàng)的依賴版本的再現(xiàn)性(https://kennethreitz.org/essays/a-better-pip-workflow)。使用Pipenv,你可以在Pipfile中指定所有的依賴關(guān)系(通常使用命令添加,刪除或更新依賴關(guān)系)。該工具可以生成一個(gè)Pipfile.lock文件,使你的構(gòu)建deterministic,幫助你避免那些因?yàn)槟悴恢朗欠裥枰哪:蕾嚠a(chǎn)生的難以捕捉的bug。
當(dāng)然,Pipenv還有很多其他的特性,并且它的文檔非常好,所以一定要看一下,并且在你所有的Python項(xiàng)目中使用它,就像我們?cè)赥ryolabs中做的那樣。
2. PyTorch
鏈接:http://pytorch.org/
說(shuō)到今年流行,尤其是在深度學(xué)習(xí)(DL)社區(qū)流行的庫(kù),那就要提到今年Facebook推出的DL框架PyTorch。
PyTorch構(gòu)建并改進(jìn)了流行的Torch框架,與Lua不同它是基于Python的。由于最近幾年人們大多轉(zhuǎn)向使用Python進(jìn)行數(shù)據(jù)科學(xué)研究,它是讓DL更容易接近的重要一步。
最值得注意的是,PyTorch已經(jīng)成為眾多研究人員的首選框架之一,因?yàn)樗鼘?shí)現(xiàn)了動(dòng)態(tài)計(jì)算圖(Dynamic Computational Graph)范式。當(dāng)使用TensorFlow,CNTK或MXNet等其他框架編寫代碼時(shí),必須首先定義計(jì)算圖。該圖指定了我們的代碼運(yùn)行的所有操作,這些操作稍后會(huì)被編譯并可能被框架優(yōu)化,以便能夠在GPU上并行運(yùn)行得更快。這個(gè)范式被稱為靜態(tài)計(jì)算圖,因?yàn)槟憧梢岳酶鞣N優(yōu)化,而且這個(gè)圖形一旦建成,就有可能運(yùn)行在不同的設(shè)備上(因?yàn)閳?zhí)行與構(gòu)建分離)。然而,在自然語(yǔ)言處理等許多任務(wù)中,工作的量通常是可變的:在將圖像提供給算法之前,可以將圖像調(diào)整為固定的分辨率,但不能對(duì)可變長(zhǎng)度的句子進(jìn)行相同的處理。這是PyTorch和動(dòng)態(tài)圖的亮點(diǎn),通過(guò)在代碼中使用標(biāo)準(zhǔn)的Python控制指令,圖在執(zhí)行時(shí)被定義,給了你很多這對(duì)于一些任務(wù)來(lái)說(shuō)必不可少的自由。
當(dāng)然,PyTorch也為你計(jì)算梯度(就像你期望從任何現(xiàn)代的DL框架中獲得的那樣),速度非???,而且是可擴(kuò)展的,所以為什么不試試呢?
3. caffe2
鏈接:https://caffe2.ai/
這可能聽(tīng)起來(lái)很瘋狂,但Facebook今年也發(fā)布了另一個(gè)很棒的DL框架。
原來(lái)的Caffe框架已被大眾使用多年,以無(wú)與倫比的性能和久經(jīng)考驗(yàn)的代碼庫(kù)而聞名。然而,最近DL的趨勢(shì)使這個(gè)框架在某些方面停滯不前。Caffe2是將Caffe帶入“現(xiàn)代世界”的嘗試。
它支持分布式訓(xùn)練,部署(即使在移動(dòng)平臺(tái)上),最新的CPU并且支持CUDA的硬件。雖然PyTorch可能更適合研究,但Caffe2適合在Facebook上看到的大規(guī)模部署。
另外,請(qǐng)看看近期的ONNX。你可以在PyTorch中構(gòu)建和訓(xùn)練模型,同時(shí)使用Caffe2進(jìn)行部署!
4. Pendulum
鏈接:https://github/sdispater/pendulum
去年,Arrow被列入榜單,它旨在通過(guò)使用Python的datetime讓你生活輕松一些。而今年,我們輪到Pendulum了。
Pendulum的優(yōu)點(diǎn)之一是它是Python標(biāo)準(zhǔn)datetime類嵌入式的替代品,因此可以輕松地將其與現(xiàn)有代碼集成,并且只有在實(shí)際需要時(shí)才使用它的功能。者已經(jīng)特別注意確保正確地處理時(shí)區(qū),默認(rèn)每個(gè)實(shí)例的timezone-aware和UTC。你也將得到一個(gè)擴(kuò)展timedelta,使datetime算法更簡(jiǎn)單。
與其他現(xiàn)有的庫(kù)不同,它努力使API具有可預(yù)測(cè)的行為,所以你知道會(huì)發(fā)生什么。如果你正在做任何與datetimes有關(guān)的重要工作,這會(huì)讓你更快樂(lè)!(查看更多:https://pendulum.eustace.io/docs/)。
5. Dash
https://plot.ly/products/dash/
如果你正在做數(shù)據(jù)科學(xué),你會(huì)使用Python生態(tài)系統(tǒng)中的優(yōu)秀工具,比如Pandas和scikit-learn。并在工作流程使用Jupyter Notebooks,這對(duì)你和你的同事來(lái)說(shuō)非常棒。但是,你如何與那些不知道如何使用這些工具的人分享這項(xiàng)工作呢?你如何建立一個(gè)界面,使人們可以輕松地使用數(shù)據(jù),可視化過(guò)程?過(guò)去,你需要一個(gè)前端團(tuán)隊(duì),用Javascript知識(shí)來(lái)構(gòu)建這些GUI。但現(xiàn)在不用了。
今年宣布的Dash是一個(gè)用于構(gòu)建Web應(yīng)用程序的Python開(kāi)源庫(kù),尤其是那些充分利用數(shù)據(jù)可視化的Web應(yīng)用程序。它建立在Flask,Plotly.js和React的基礎(chǔ)上,并提供了抽象,使你不必學(xué)習(xí)這些框架,更高效的研發(fā)。這些應(yīng)用程序可以在瀏覽器中呈現(xiàn)并響應(yīng),因此在移動(dòng)設(shè)備中也能使用。
了解更多關(guān)于Dash:https://plot.ly/dash/gallery
6.PyFlux
Python中有許多庫(kù)用來(lái)做數(shù)據(jù)科學(xué)和ML,但是當(dāng)你的數(shù)據(jù)點(diǎn)是隨著時(shí)間的推移而變化的度量(例如股票價(jià)格,從儀表中獲得的度量等等)時(shí),這樣的庫(kù)就很少了。
PyFlux是一個(gè)專門為時(shí)間序列而開(kāi)發(fā)的 Python開(kāi)源庫(kù)。時(shí)間序列研究是統(tǒng)計(jì)學(xué)和計(jì)量經(jīng)濟(jì)學(xué)的一個(gè)分支,目標(biāo)可以描述時(shí)間序列的表現(xiàn)(依據(jù)隱藏組件或特征),也能預(yù)測(cè)時(shí)間序列未來(lái)的表現(xiàn)。
PyFlux允許用于時(shí)間序列建模的概率方法,并且已經(jīng)實(shí)現(xiàn)了幾個(gè)像GARCH這樣的現(xiàn)代時(shí)間序列模型。
7.Fire
https://github/google/python-fire
通常情況下,你需要為自己的項(xiàng)目制作命令行界面(CLI)。除了傳統(tǒng)的argparse,Python中還有click或docopt可用。谷歌今年宣布的Fire,在解決同樣的問(wèn)題上提出了不同的方法。
Fire是一個(gè)開(kāi)源的庫(kù),可以為任何Python項(xiàng)目自動(dòng)生成一個(gè)CLI。沒(méi)錯(cuò),是自動(dòng)的:你幾乎不需要編寫任何代碼或文檔來(lái)構(gòu)建你的CLI!想完成你的CLI,只需要調(diào)用一個(gè)Fire方法并把它傳遞給一個(gè)CLI:一個(gè)函數(shù),一個(gè)對(duì)象,一個(gè)類,一個(gè)字典,甚至你可以不傳遞任何參數(shù)(這會(huì)將你的整個(gè)代碼轉(zhuǎn)換為一個(gè)CLI)。這個(gè)庫(kù)可以為你節(jié)省很多時(shí)間。
8.imbalanced-learn
https://github/scikit-learn-contrib/imbalanced-learn
在一個(gè)完美世界的里,我們會(huì)有完美平衡的數(shù)據(jù)集,我們將它們都拿來(lái)將訓(xùn)練模型,多么美好??上КF(xiàn)實(shí)世界不是這樣的,某些任務(wù)更傾向于不平衡的數(shù)據(jù)。例如,在預(yù)測(cè)信用卡交易中的欺詐行為時(shí),你會(huì)預(yù)測(cè)絕大多數(shù)交易(+ 99.9%)實(shí)際上是合法的。如果我們簡(jiǎn)單的訓(xùn)練ML算法會(huì)出現(xiàn)令人沮喪的性能,所以在處理這些類型的數(shù)據(jù)集時(shí)需要特別小心。
幸運(yùn)的是,這是一個(gè)已經(jīng)被研究過(guò)的問(wèn)題,存在各種各樣解決的技術(shù)。Imbalanced-learn是一個(gè)Python包,它提供了關(guān)于這些技術(shù)的實(shí)現(xiàn)。它與scikit-learn兼容,是scikit-learn-contrib項(xiàng)目的一部分。
9. FlashText
https://github/vi3k6i5/flashtext
如果您需要搜索某些文本并將其替換為其他內(nèi)容(如大多數(shù)數(shù)據(jù)清理工作),則通常將其轉(zhuǎn)為正則表達(dá)式。他們能很好地完成這項(xiàng)工作,但是有時(shí)會(huì)發(fā)生這樣的情況:需要搜索的數(shù)以千計(jì)的內(nèi)容,正則表達(dá)式可能會(huì)非常緩慢。
為此,F(xiàn)lashText是一個(gè)更好的選擇。它使整個(gè)操作的運(yùn)行時(shí)間大大提高了。FlashText的優(yōu)點(diǎn)在于無(wú)論搜索條件有多少,運(yùn)行時(shí)都是一樣的,而正則表達(dá)式中運(yùn)行時(shí)幾乎是隨著條件數(shù)呈線性增長(zhǎng)。
FlashText證明了算法和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)的重要性,即使對(duì)于簡(jiǎn)單的問(wèn)題,更好的算法也可以很容易地勝過(guò)最快的cpu運(yùn)行簡(jiǎn)單的實(shí)現(xiàn)。
10. Luminoth
https://luminoth.ai/
現(xiàn)在,圖像無(wú)處不在,理解它的內(nèi)容對(duì)于許多應(yīng)用程序來(lái)說(shuō)至關(guān)重要。值得慶幸的是,由于DL的進(jìn)步,圖像處理技術(shù)已經(jīng)進(jìn)步了很多。
Luminoth是一個(gè)使用TensorFlow和Sonnet構(gòu)建的用于計(jì)算機(jī)視覺(jué)的開(kāi)源Python工具包。目前,它可以支持以Faster R-CNN模型的形式進(jìn)行對(duì)象檢測(cè)。
但是Luminoth不僅是一個(gè)特定模型的實(shí)現(xiàn)。它是被構(gòu)建為模塊化和可擴(kuò)展,所以可以直接定制現(xiàn)有的部分或者將其擴(kuò)展為新的模型來(lái)處理不同的問(wèn)題,盡可能多地復(fù)用代碼。它提供的工具可以輕松完成構(gòu)建DL模型所需的工程工作:將數(shù)據(jù)(在本例中為圖像)轉(zhuǎn)換合適的格式輸送到數(shù)據(jù)管道(TensorFlow的tfrecords)中,執(zhí)行數(shù)據(jù)增強(qiáng),在一個(gè)或多個(gè)gpu上運(yùn)行訓(xùn)練(使用大型數(shù)據(jù)集時(shí)必須進(jìn)行分布式培訓(xùn)),運(yùn)行評(píng)估度量,輕松地在TensorBoard中可視化 并用簡(jiǎn)單的API或?yàn)g覽器界面部署訓(xùn)練號(hào)的模型,以便人們使用。
此外,Luminoth直接與Google Cloud的ML Engine集成,所以即使你沒(méi)有強(qiáng)大的GPU,也可以使用命令在云端進(jìn)行訓(xùn)練。
本文為編譯文章,轉(zhuǎn)載請(qǐng)注明出處。
來(lái)源:atyun_com
來(lái)源網(wǎng)址:http://atyun/13563_2017最流行的十大python庫(kù).html
Python不能用于大型項(xiàng)目?關(guān)于Python的10大誤解 行業(yè)視頻課程
語(yǔ)言多元化是PayPal編程文化中一個(gè)重要的組成部分。在C++和Java長(zhǎng)期流行的同時(shí),更多的團(tuán)隊(duì)選擇了Jva和Scala。同時(shí),Braintree的收購(gòu)也引入了一個(gè)久經(jīng)世故的Ruby社區(qū)。Python作為一門特別的語(yǔ)言,在eBay和PayPal有很長(zhǎng)的歷史。而且其流行程度依然有增不減。
eBay的開(kāi)發(fā)者支持Python這個(gè)應(yīng)用于基層領(lǐng)域多年的語(yǔ)言。甚至在eBay管理層官方支持Python以前,技術(shù)人員就開(kāi)始使用Python。我在幾年前加入PayPal并選擇Python來(lái)寫內(nèi)部應(yīng)用,然而,我卻發(fā)現(xiàn)了PayPal中將近15年以前的Python代碼。
目前,Python 支撐著 超過(guò)50個(gè)項(xiàng)目, 包括:
功能和產(chǎn)品型, 例如 eBay Now 和 RedLaser運(yùn)營(yíng)和基礎(chǔ)設(shè)施型**, 從開(kāi)放的 OpenStack 到專有設(shè)施中間層服務(wù)和應(yīng)用型**, 例如 PayPal 用來(lái)設(shè)定價(jià)格以及檢測(cè)用戶可用功能的那個(gè)(服務(wù)/應(yīng)用)監(jiān)測(cè)代理和接口*型*, 用于涉及到部署和安全的一些用例批處理任務(wù)*型*, 例如數(shù)據(jù)導(dǎo)入,價(jià)格調(diào)整,及其它項(xiàng)目以及不計(jì)其數(shù)的開(kāi)發(fā)者工具
在接下來(lái)的文章里我將詳細(xì)介紹那些使得 eBay 和 PayPal 的 Python 生態(tài)系統(tǒng)從2011年的不超過(guò)25個(gè)工程師到2014年超過(guò)260個(gè)工程師所使用的技術(shù)和舉措。對(duì)于本文,我則會(huì)專注于10個(gè)不得不予以揭露的關(guān)于 eBay 和 PayPal 的企業(yè)環(huán)境的謬誤。
謬誤 #1: Python 是一門新語(yǔ)言
伴隨著所有的初創(chuàng)公司正在使用它以及孩子們最近也在學(xué)習(xí)它的事實(shí),這個(gè)謬誤為何仍然存在是可以理解的。實(shí)際上 Python 已經(jīng) 超過(guò)23歲了, 它最初發(fā)布于1991年, 早于 HTTP 1.0協(xié)議 5年且早于 Java 4年. 目前比較有著名的很早就使用 Python 的例子是在1996年: Google 的第一個(gè)成功的網(wǎng)絡(luò)爬蟲(chóng)。
如果你對(duì)于長(zhǎng)長(zhǎng)的 Python 歷史比較好奇,Python 的作者 Guido van Rossum 已經(jīng)為你準(zhǔn)備好整個(gè)故事。
謬誤 #2: Python 沒(méi)有被編譯
不像 C++ 一樣需要一個(gè)獨(dú)立的編譯器工具鏈,Python 實(shí)際上被編譯成了字節(jié)碼,和 Java 或者許多其他的編譯型語(yǔ)言十分相似。更進(jìn)一步的編譯過(guò)程,如果有的話, 取決于運(yùn)行時(shí)環(huán)境, 不管是 CPython,PyPy,Jython/JVM,IronPython/CLR,或是其它的進(jìn)程式虛擬機(jī)(process virtual machine)。參考 謬誤 #6 來(lái)了解更多。
一條在 PayPal 以及其它地方的通用原則就是,(應(yīng)用的)安全性不能依賴于代碼的已編譯狀態(tài)。更為重要的是加強(qiáng)運(yùn)行時(shí)環(huán)境的安全,因?yàn)閷?shí)質(zhì)上每種語(yǔ)言都有一個(gè)解碼器,或者能被攔截并導(dǎo)出受保護(hù)的狀態(tài)。參考下一條謬誤來(lái)了解更多的 Python 安全性問(wèn)題。
謬誤 #3: Python 不安全
輕量級(jí) Python 的親和力可能使他看起來(lái)不怎么可怕,但是這里直覺(jué)很大程度上是受到了誤導(dǎo)的. 安全的一個(gè)核心原則就是盡可能讓呈現(xiàn)的目標(biāo)更小. 大系統(tǒng)是違背安全原則的,因?yàn)樗麄冓呄蛴?使行為過(guò)渡集中化, 并且也 讓開(kāi)發(fā)者難于理解. Python 通過(guò)倡導(dǎo)簡(jiǎn)潔化來(lái)邊緣化這些惡心的問(wèn)題. 更有甚者, CPython 通過(guò)讓自己成為一個(gè)簡(jiǎn)單、穩(wěn)定并且易于審核的虛擬機(jī)來(lái)使這些問(wèn)題得到解決. 事實(shí)上,近期 Coverity Software 的一個(gè)分析結(jié)果顯示 CPython 得到了他們的最高質(zhì)量評(píng)級(jí)。
Python 還擁有一系列可擴(kuò)展的開(kāi)源、產(chǎn)業(yè)標(biāo)準(zhǔn)化的安全庫(kù)序列. 在PayPal, 我們把安全和授信看做是重中之重, 我們發(fā)現(xiàn) hashlib, PyCrypto, 以及 OpenSSL, 通過(guò) PyOpenSSL 和我們自己的定制構(gòu)建的結(jié)合,涵蓋了 PayPal 多樣化的安全和性能需求。
這些諸多的原因,使得 Python 成為PayPal(和eBay)的應(yīng)用程序安全團(tuán)隊(duì)在某些業(yè)務(wù)中最快的選擇. 這里有把Python用在PayPal的安全第一環(huán)境中的幾個(gè)以安全為基礎(chǔ)應(yīng)用程序:
創(chuàng)建安全代理,以促進(jìn)密鑰的輪換以并鞏固加密實(shí)現(xiàn)同業(yè)界領(lǐng)先的 HSM 技術(shù)集成為缺乏兼容性的技術(shù)棧構(gòu)建受TLS保護(hù)的封裝代理為我們內(nèi)部的互相認(rèn)證計(jì)劃生成鍵和證書開(kāi)發(fā)主動(dòng)的漏洞掃描器
另外,還有無(wú)數(shù)存在安全隱患的用Python構(gòu)建,面向操作的系統(tǒng), 諸如防火墻和連接管理. 未來(lái),我們一定回去深入的整合PayPal Python的安全事項(xiàng).
謬誤 #4: Python 是一門腳本語(yǔ)言
Python 確實(shí)可以用來(lái)編寫腳本,并且因其簡(jiǎn)單的語(yǔ)法、跨平臺(tái)并且無(wú)所不在于 Linux, Macs, 和其它Unix 機(jī)器而成為這個(gè)領(lǐng)域的領(lǐng)跑者之一。
事實(shí)上, Python 可能是常規(guī)用途編程語(yǔ)言中最靈活的技術(shù). 以下是一些實(shí)例:
電信基礎(chǔ)設(shè)施 (Twilio)支付系統(tǒng) (PayPal, Balanced Payments)神經(jīng)科學(xué)和心理學(xué) (許多, 許多, 例子)數(shù)值分析和工程 (numpy, numba, 以及 更多其它)動(dòng)畫(LucasArts, Disney, Dreamworks)游戲后臺(tái) (Eve Online, Second Life, Battlefield, 以及 其它很多)Email 基礎(chǔ)設(shè)施 (Mailman, Mailgun)媒體存儲(chǔ)和處理 (YouTube, Instagram, Dropbox)操作和系統(tǒng)管理 (Rackspace, OpenStack)自然語(yǔ)言處理(NLTK)機(jī)器學(xué)習(xí)和計(jì)算機(jī)版本 (scikit-learn, Orange, SimpleCV)安全性和滲透性測(cè)試 (很多很多 以及 eBay/PayPal大數(shù)據(jù) (Disco, Hadoop support)如理 (Calendar Server, 它 驅(qū)動(dòng)了 Apple iCal)搜索系統(tǒng) (ITA, Ultraseek, 還有 Google)Internet 基礎(chǔ)設(shè)施 (DNS) (BIND 10)
更別提網(wǎng)站和web服務(wù)了,那些都不在少數(shù). 事實(shí)上,PayPal工程師看起來(lái)像是有興趣致力于基于Python的web特性,比如 YouTube 和 Yelp. 如果對(duì)Python成功案例的更大清單感興趣,那就看看官方的清單吧.
謬誤 #5: Python 是弱類型的
Python 類型系統(tǒng)的特點(diǎn)是擁有強(qiáng)大、靈活的類型操作. 維基百科上對(duì)此作出的闡述.
而存在一個(gè)不爭(zhēng)而有趣的事實(shí)是, Python 是比Java更加強(qiáng)類型的. Java 對(duì)于原生類型和對(duì)象區(qū)分了類型系統(tǒng),它讓null存在于一個(gè)灰色地帶. 另一方面,現(xiàn)代的 Python 擁有一個(gè)統(tǒng)一的強(qiáng)類型系統(tǒng), 其中什么都沒(méi)有 的類型是明確指定的. 更進(jìn)一步的,JVM自身也是動(dòng)態(tài)類型的,因?yàn)榭梢园阉?根源 追溯到由Sun所收購(gòu)的Smalltalk VM的一個(gè)實(shí)現(xiàn)。
Python的類型系統(tǒng) 很棒,但要提供給企業(yè)級(jí)使用,目前仍然還有許多更重大的事項(xiàng)需要關(guān)注。
謬誤 #6: Python 速度慢
首先是有一個(gè)重要區(qū)別: Python 是一門編程語(yǔ)言,而不是運(yùn)行時(shí)環(huán)境. Python 擁有幾個(gè)實(shí)現(xiàn):
CPython是參考實(shí)現(xiàn), 且也是廣泛發(fā)布和使用的實(shí)現(xiàn).Jython是Python用于JVM的是一個(gè)成熟的實(shí)現(xiàn).IronPython是 Microsoft 針對(duì)其自家的通用語(yǔ)言運(yùn)行時(shí)——又名 .NET,實(shí)現(xiàn)的Python .PyPy是一個(gè)正在日趨成熟的Python實(shí)現(xiàn),擁有JIT編譯,增量垃圾收集諸多先進(jìn)的特性.每一個(gè)運(yùn)行時(shí)都有其自己的性能特點(diǎn), 而且他們本身也不慢. 這里更重要的地方在于不能錯(cuò)誤地把一個(gè)性能指標(biāo)分派到一門編程語(yǔ)言智商. 應(yīng)該總是把該評(píng)估用在一個(gè)應(yīng)用程序運(yùn)行時(shí)上面,最好是針對(duì)一個(gè)特定的使用場(chǎng)景。
清楚了那些事項(xiàng)之后,下面就是一些有Python提供的小項(xiàng),體現(xiàn)其重要的性能優(yōu)勢(shì):
把 NumPy 用作 Intel 的 MKL SIMD接口PyPy的 JIT 編譯能 達(dá)到比C還快的性能Disqus 能在同樣的100個(gè)盒子上容納兩億五千萬(wàn)到5億用戶
誠(chéng)然,這些都不是最新的列子,只是我個(gè)人的最愛(ài)罷了. 這將很容易扯到高性能Python以及獨(dú)立提供的運(yùn)行時(shí)這些廣闊的領(lǐng)域. 我們不應(yīng)只是專注于解決單個(gè)特殊的案例, 而是應(yīng)該把注意力放在對(duì)開(kāi)發(fā)人員在 最終產(chǎn)品性能 方面的生產(chǎn)力的普遍影響上面, 特別是在一種企業(yè)級(jí)環(huán)境之下。
C++ vs Python,. 兩種語(yǔ)言在同一個(gè)輸出下的對(duì)比.
給定足夠的時(shí)間,一個(gè)循規(guī)蹈矩的開(kāi)發(fā)者只會(huì)按照下面這種經(jīng)過(guò)論證的方式來(lái)編寫精確高效的軟件:
設(shè)計(jì)實(shí)現(xiàn)一個(gè)可以正確完成任務(wù)的軟件,包括開(kāi)發(fā)單獨(dú)的測(cè)試測(cè)試性能,明確瓶頸優(yōu)化,根據(jù)測(cè)試和Amdahl法則,并且利用Python與C的淵源
雖然這聽(tīng)起來(lái)很簡(jiǎn)單,但是即使是老道的工程師,這依舊是一個(gè)非常耗時(shí)的過(guò)程。Python設(shè)計(jì)之初就考慮到了這一套開(kāi)發(fā)流程。根據(jù)我們的經(jīng)驗(yàn),通常C++和Java項(xiàng)目完成一次迭代流程的時(shí)間,夠Python項(xiàng)目完成三次迭代流程。今天,PayPal和eBay中不乏有Python項(xiàng)目使用更少的代碼戰(zhàn)勝了同類C++和Java項(xiàng)目,這多虧了快速的開(kāi)發(fā)使得仔
細(xì)的裁剪和優(yōu)化變得可能。
Myth #7: Python無(wú)法做到大規(guī)模
大規(guī)模有許多定義,但無(wú)論怎樣,YouTube是個(gè)大規(guī)模網(wǎng)站。每月UV超過(guò)十億,每分鐘上傳的視頻時(shí)長(zhǎng)超過(guò)100小時(shí),占用互聯(lián)網(wǎng)帶寬的20%,所有這一切都以Python作為核心技術(shù)。Dropbox,Disqus, Eventbrite, Reddit, Twilio, Instagram, Yelp, EVE Online, Second Life,,以及,是的,以及eBay和PayPal中都有Python大規(guī)模的例子,這些證明大規(guī)模不僅僅是可能:它是一種模式。
成功的關(guān)是鍵簡(jiǎn)單性且一致性。CPython,Python的主要虛擬機(jī),其最大限度地放大了這些特性,從而演變出了一個(gè)精確可測(cè)的運(yùn)行時(shí)。人們很難發(fā)現(xiàn) Python程序員關(guān)心垃圾的收集暫停或應(yīng)用地啟動(dòng)時(shí)間。擁有強(qiáng)大的平臺(tái)和網(wǎng)絡(luò)支持,Python其本身自然而然的智能水平可擴(kuò)展,BitTorrent就是其充分的體現(xiàn)。
此外,規(guī)?;饕w測(cè)量和迭代。Python是以分析和優(yōu)化為要義建立的。看Myth #6了解更多Python如何垂直拓展的細(xì)節(jié)。
Myth #8: Python缺少好的并發(fā)支持
除了偶爾叫囂性能和規(guī)?;膯?wèn)題,有人想提的技術(shù)些,”Python缺乏并發(fā),”或者,”GIL怎么樣?”如果幾十個(gè)反例仍不足以支持Python水平及垂直拓展規(guī)模的能力,那么再更深地解釋CPython實(shí)現(xiàn)細(xì)節(jié)也不會(huì)有幫助,所以我會(huì)簡(jiǎn)短些。
Python擁有強(qiáng)大的并發(fā)原語(yǔ),包括generators, greenlets, Deferreds, 和futures.。Python有優(yōu)秀的并發(fā)框架,包括eventlet, gevent,和Twisted。Python在定制運(yùn)行時(shí)尚投入了驚人的工作量,包括Stackless和 PyPy。所有煩人這些和更多表明,根本不存工程師們?cè)赑ython并發(fā)編程方面的缺憾。同時(shí),所有這些都正在被正式的在企業(yè)生產(chǎn)環(huán)境中支持或使用。例如,請(qǐng)參考Myth #7。
全局解釋器鎖,或稱GIL,是Python在大多數(shù)應(yīng)用場(chǎng)景下的性能優(yōu)化,也是幾乎所有CPython實(shí)現(xiàn)代碼的開(kāi)發(fā)上的基礎(chǔ)優(yōu)化。GIL使得Python可以很便利地使用操作系統(tǒng)的線程或輕線程(通常指greenlets),且不影響使用多進(jìn)程。更多相關(guān)信息,請(qǐng)看該主題的Q&A列表,以及Python文檔中的介紹。
在PayPal中,一個(gè)典型服務(wù)的部署需要多臺(tái)機(jī)器,多個(gè)進(jìn)程,多個(gè)線程,以及一個(gè)數(shù)字非常龐大的greenlets,相當(dāng)于一個(gè)非常強(qiáng)大可擴(kuò)展的并行環(huán)境(見(jiàn)下圖)。在大多數(shù)的企業(yè)環(huán)境中,團(tuán)隊(duì)更傾向于往更高層次過(guò)度,謹(jǐn)慎并注重災(zāi)難恢復(fù)。然而,在某些情況下,每臺(tái)機(jī)器每天Python服務(wù)仍然處理數(shù)以百萬(wàn)計(jì)的請(qǐng)求,而且輕松處理。
一個(gè)基于單一worker的協(xié)同異步架構(gòu)草圖。最外層的盒子是進(jìn)程,下一個(gè)層次為線程,這里這些線程都是輕線程。操作系統(tǒng)處理線程間的搶占,而I/O異步協(xié)同合作。
謬誤 #9: Python 程序員很稀缺
事實(shí)上,現(xiàn)在使用 Python 的 web 開(kāi)發(fā)者的確沒(méi)有使用 PHP 或者 Java 的 web 開(kāi)發(fā)者多。這可能主要是由于企業(yè)需求和教育之間的相互作用導(dǎo)致的,不過(guò) 教育領(lǐng)域(教學(xué)所使用的編程語(yǔ)言)的趨勢(shì)使得情況可能產(chǎn)生變化 。
也就是說(shuō),使用 Python 的開(kāi)發(fā)者并不稀缺?,F(xiàn)在全世界有數(shù)百萬(wàn)使用 Python 的開(kāi)發(fā)者。已有幾十個(gè)Python 技術(shù)大會(huì)、 StackOverflow 上成千上萬(wàn)的 Python 內(nèi)容問(wèn)答、雇傭大量使用 Python 的開(kāi)發(fā)者的大企業(yè)比如 YouTube 、 美國(guó)銀行( Bank of American )和 LucasArts/Dreamworks 等等,這些都顯而易見(jiàn)地證實(shí)了這一點(diǎn)。在 eBay 和 PayPal 我們一直保持擁有幾百位使用 Python 的正式開(kāi)發(fā)者,這是怎么做到的呢?
那么,當(dāng)一個(gè)項(xiàng)目被創(chuàng)建時(shí)為什么它會(huì)被首推?對(duì)于孩子來(lái),大學(xué)生和教授們來(lái)說(shuō),Python作為第一門程序設(shè)計(jì)語(yǔ)言是非常易于學(xué)習(xí)的。在eBay,僅僅需要一個(gè)星期,一個(gè)新的Python程序員就能展示一個(gè)真正的成果,并且他們開(kāi)始散發(fā)光芒常常只要2-3個(gè)月,通過(guò)Internet的寶藏(互動(dòng)式教程,書,文檔和開(kāi)源代碼庫(kù))一切皆有可能。
另外一個(gè)重要的考慮因素是,項(xiàng)目使用Python會(huì)更簡(jiǎn)單,它不會(huì)像其他項(xiàng)目那樣需要那么多的開(kāi)發(fā)者。在謬誤6和謬誤9中提到的那樣,在Python項(xiàng)目中,學(xué)習(xí)像Instagram那樣的高效團(tuán)隊(duì)是一個(gè)常見(jiàn)的比喻,并且這確實(shí)是我們?cè)趀Bay和PayPal的經(jīng)驗(yàn)。
Myth #10: Python不適應(yīng)于大項(xiàng)目
Myth #7 討論了大規(guī)模運(yùn)行Python的項(xiàng)目,但開(kāi)發(fā)Python大規(guī)模項(xiàng)目是什么情況呢?正如在Myth #9中提到的,大多數(shù)Python不被人看好。 然而Instagram在其被億元美金收購(gòu)當(dāng)天達(dá)到千萬(wàn)的點(diǎn)擊量,而整個(gè)公司只有十幾個(gè)人。Dropbox在2011年只有70個(gè)工程師,其他團(tuán)隊(duì)更少。所以,Python適合大規(guī)模團(tuán)隊(duì)嗎?
美國(guó)銀行實(shí)際上有超過(guò)5000的Python開(kāi)發(fā)者,一個(gè)單獨(dú)的項(xiàng)目超過(guò)一千萬(wàn)行Python代碼。JP摩根也經(jīng)歷了類似的轉(zhuǎn)變。YouTube也有數(shù)千的開(kāi)發(fā)者和數(shù)百萬(wàn)行的代碼。大規(guī)模產(chǎn)品和團(tuán)隊(duì)每天都在使用Python,因?yàn)樗哂辛己玫哪K化和封裝特性,在特定方面許多的大規(guī)模開(kāi)發(fā)建議是一致的。工具,強(qiáng)大的慣例以及代碼審查促使了項(xiàng)目規(guī)模化管理的現(xiàn)實(shí)。
幸運(yùn)的是,Python發(fā)展于上面所提到的好的奠基。我們?cè)跈z查執(zhí)行使用pyflakes以及其他工具進(jìn)行Python代碼的靜態(tài)分析,正如堅(jiān)持PEP8——Python語(yǔ)言的基礎(chǔ)風(fēng)格指南。
最后,應(yīng)該指出的是,除了調(diào)度加速M(fèi)yth #6以及#7中所提到的,使用Python的項(xiàng)目通常需要更少的開(kāi)發(fā)者。我們常見(jiàn)的成功案例中,使用Java或C++的項(xiàng)目通常有3-5開(kāi)發(fā)者耗時(shí)2-6個(gè)月,最終由單一的開(kāi)發(fā)者在2-6周(或小時(shí),因?yàn)檫@些原因)完成?...
10大Python開(kāi)源項(xiàng)目推薦 營(yíng)銷視頻課程
▌Rank 1:Requests-HTML v0.9(7385 stars on Github,來(lái)自Kenneth Reitz)
該庫(kù)旨在盡可能簡(jiǎn)單直觀地解析 HTML,僅支持 Python 3.6。
項(xiàng)目地址:https://github/kennethreitz/requests-html
▌Rank 2:PyTest v3.5(2453 stars on Github,來(lái)自Pytest-dev)
該項(xiàng)目是一個(gè)可擴(kuò)展的 Python 框架,可以輕松編寫小型測(cè)試,支持更復(fù)雜的功能測(cè)試。
項(xiàng)目地址:https://github/pytest-dev/pytest
▌Rank 3:Lector(327 stars on Github,來(lái)自BasioMeusPuga)
基于 Qt 的電子書閱讀器
項(xiàng)目地址:https://github/BasioMeusPuga/Lector
▌Rank 4:Asciinema v2.0(5491 stars on Github,來(lái)自Asciinema)
Python 編寫的終端會(huì)話錄制器。
項(xiàng)目地址:https://github/asciinema/asciinema
▌Rank 5:Snips-nlu v0.13(1416 stars on Github,來(lái)自Snips)
Snips-nlu 是一個(gè) Python 庫(kù),可以解析用自然語(yǔ)言編寫的句子并提取結(jié)構(gòu)化信息。
項(xiàng)目地址:https://github/snipsco/snips-nlu
▌Rank 6:Black(1665 stars on Github,來(lái)自u(píng)kasz Langa)
Python 代碼格式化工具庫(kù)。
項(xiàng)目地址:https://github/ambv/black
▌Rank 7:Instagram-terminal-news-feed(690 stars on Github,來(lái)自Bill Cheng)
Instagram Terminal Feed
項(xiàng)目地址:https://github/billcccheng/instagram-terminal-news-feed
▌Rank 8:Makesite(481 stars on Github,來(lái)自Sunaina Pai)
適合 Python 工程師的簡(jiǎn)單、輕量級(jí)靜態(tài)網(wǎng)站/博客生成器。
項(xiàng)目地址:https://github/sunainapai/makesite
▌Rank 9:Twitter-scraper(832 stars on Github,來(lái)自Kenneth Reitz)
Python 寫的 Twitter 爬蟲(chóng)工具,無(wú) API 流速限制,非常高效,可輕松獲取任何用戶的推文。
項(xiàng)目地址:https://github/kennethreitz/twitter-scraper
▌Rank 10:Fast-Pandas(667 stars on Github,來(lái)自M. Mansour)
Pandas 是為數(shù)據(jù)科學(xué)家和開(kāi)發(fā)人員提供的最靈活、最強(qiáng)大的工具之一。開(kāi)發(fā)者可通過(guò)幾種方式執(zhí)行特定的任務(wù)。Fast-Pandas 旨在針對(duì)這些情況下的不同可用方法進(jìn)行基準(zhǔn)測(cè)試。此外,在 numpy 和 pandas 中都有專門的功能部分。
項(xiàng)目地址:https://github/mm-mansour/Fast-Pandas
原文地址:https://medium.mybridge.co/python-top-10-open-source-of-the-month-v-apr-2018-9e91343756a
2018年最火的5大Python開(kāi)源項(xiàng)目,總有適合你的! 行業(yè)視頻課程
前幾天看到一條新聞,說(shuō)是高中生課程里面開(kāi)設(shè)python課程了,這小孩子都來(lái)?yè)屨际袌?chǎng)了,這就是打了很多人的臉,特別是已經(jīng)畢業(yè)很多年或者正在學(xué)校的人,小孩子都作為標(biāo)準(zhǔn)的教材來(lái)學(xué)習(xí)了,作為過(guò)來(lái)人還有什么理由說(shuō)學(xué)不好。讓自己做得多說(shuō)的少最合適。
說(shuō)到python現(xiàn)在處于風(fēng)口期,相對(duì)來(lái)說(shuō)入門也比較容易。在人工智能以及大數(shù)據(jù)分析上都具備很強(qiáng)的特性。
Python語(yǔ)言易學(xué)易學(xué),高效開(kāi)發(fā)。Python語(yǔ)言開(kāi)發(fā)的開(kāi)源項(xiàng)目非?;钴S。下面是五個(gè)最活躍的Python開(kāi)源項(xiàng)目。
1)排名第一,當(dāng)然是關(guān)于機(jī)器學(xué)習(xí)谷歌開(kāi)源項(xiàng)目tensorflow,TensorFlow是一個(gè)對(duì)數(shù)值計(jì)算的數(shù)據(jù)流圖,對(duì)開(kāi)源項(xiàng)目的統(tǒng)計(jì),這個(gè)項(xiàng)目被宣布與一百萬(wàn)星和叉,被廣泛應(yīng)用于機(jī)器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)研究。
2)第二個(gè)地方是python的新燒瓶。燒瓶是一個(gè)小型的Python Web開(kāi)發(fā)框架。它是基于WSGI工具箱和jinja2模板引擎,它可以配置和開(kāi)發(fā)Python網(wǎng)站最靈活快速的。
3。)第三的地方是在Python Web方向的經(jīng)典Django,和Django Web框架,采用m-v-t設(shè)計(jì)模式。在Django,由于控制器接受用戶輸入部分由框架本身的處理,所以Django編程更側(cè)重于模型(模型)、模板(模板)和視圖(視圖)。小編推薦一個(gè)學(xué)Python的學(xué)習(xí)裙【五八八,零九零,九四二】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有很多干貨和技術(shù)分享使用Django,我們可以快速創(chuàng)建高質(zhì)量、易維護(hù)、數(shù)據(jù)庫(kù)驅(qū)動(dòng)的Web服務(wù)程序,特別是與學(xué)生建立數(shù)據(jù)庫(kù)的操作不是很熟悉,寶。
4)是Python的成熟,功能齊全的排在功能測(cè)試框架pytest pytest測(cè)試框架第四,可以幫助你更好的編寫自動(dòng)化測(cè)試程序,它可以適應(yīng)全功能測(cè)試,集成測(cè)試復(fù)雜,從簡(jiǎn)單的單元測(cè)試,以及眾多的支持插件開(kāi)發(fā)。
5)在數(shù)據(jù)收集工具Scrapy排名第五,Scrapy是一個(gè)優(yōu)秀的數(shù)據(jù)網(wǎng)絡(luò)爬蟲(chóng)框架,用戶只需要定制幾個(gè)模塊的開(kāi)發(fā)可以實(shí)現(xiàn)完美的網(wǎng)絡(luò)爬蟲(chóng)容易,使用它來(lái)抓取網(wǎng)頁(yè)內(nèi)容的數(shù)據(jù)和各種圖像文件等非常方便;Scrapy還提供各種履帶式基礎(chǔ)的類型,如basespider和站點(diǎn);Scrapy被廣泛應(yīng)用于數(shù)據(jù)挖掘、網(wǎng)絡(luò)監(jiān)控和自動(dòng)測(cè)試等。
以上排名是基于代碼提交和叉活動(dòng)的排名,只反映了開(kāi)源代碼的流行,企業(yè)市場(chǎng)應(yīng)用不熱,注意差異,你必須根據(jù)自己的需要選擇適合你的項(xiàng)目的python開(kāi)源框架和工具。
不管你是懷著什么目的,求職加薪,或者是興趣。首先你得準(zhǔn)備吃苦的思想準(zhǔn)備。學(xué)編程語(yǔ)言是枯燥的,得持之以恒。如果學(xué)python都是從入門到放棄,那么學(xué)其它東西會(huì)更難。
還需要有些自學(xué)能力,出現(xiàn)問(wèn)題,自己嘗試解決。多加練習(xí),在練習(xí)和不斷挫折中理解和掌握,熟能生巧。
不要急躁,真正能為你所用的技能,不是一朝一夕速成的。真正能被你吸收的養(yǎng)分,不是別人嚼爛了給你。你自己體會(huì)到的知識(shí),才會(huì)被你吸收,在大腦里停留許久。
GitHub 上最火的 Python 開(kāi)源項(xiàng)目 推廣視頻課程
許多開(kāi)發(fā)者都有定期瀏覽 GitHub 的習(xí)慣,對(duì)于 GitHub 上如此眾多的項(xiàng)目,有人不斷分享,有人不斷 Mark。每個(gè)人瀏覽的時(shí)候,都會(huì)注意到 Star 的數(shù)量,它代表著這個(gè)項(xiàng)目的熱度,今天,我們依照 Star 數(shù),盤點(diǎn) GitHub 上Python 語(yǔ)言中最火的 15 個(gè)開(kāi)源項(xiàng)目,希望對(duì)你有幫助,排名如下:
1
機(jī)器學(xué)習(xí)系統(tǒng) tensorflow
Google 的 TensorFlow 是最流行的開(kāi)源 AI 庫(kù)之一。它的高計(jì)算效率,豐富的開(kāi)發(fā)資源使它被企業(yè)和個(gè)人開(kāi)發(fā)者廣泛采用。TensorFlow 是一個(gè)采用數(shù)據(jù)流圖,用于數(shù)值計(jì)算的開(kāi)源軟件庫(kù)。TensorFlow 最初由Google 大腦小組(隸屬于 Google 機(jī)器智能研究機(jī)構(gòu))的研究員和工程師們開(kāi)發(fā)出來(lái),用于機(jī)器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)方面的研究,但這個(gè)系統(tǒng)的通用性使其也可廣泛用于其他計(jì)算領(lǐng)域。想要更深入了解可點(diǎn)擊《快速入門 Google 機(jī)器學(xué)習(xí)系統(tǒng) TensorFlow》
2
oh-my-zsh
oh-my-zsh 是基于 zsh 的功能做了一個(gè)擴(kuò)展,方便的插件管理、主題自定義,以及漂亮的自動(dòng)完成效果。 Zsh 和 bash 一樣,是一種 Unix shell,但大多數(shù) Linux 發(fā)行版本都默認(rèn)使用 bash shell。但 Zsh 有強(qiáng)大的自動(dòng)補(bǔ)全參數(shù)、文件名、等功能和強(qiáng)大的自定義配置功能。
3
命令行 HTTP 工具包
HTTPie 是一個(gè)命令行 HTTP 客戶端,提供命令行交互方式來(lái)訪問(wèn) HTTP 服務(wù)。其目標(biāo)是使CLI 與 Web 服務(wù)的交互盡可能人性化。它提供了一個(gè)簡(jiǎn)單的 http 命令,允許使用簡(jiǎn)單自然的語(yǔ)法發(fā)送任意 HTTP 請(qǐng)求。
4
shell 命令行拓展 thefuck
首先這個(gè)項(xiàng)目的名字就很引人注目,取名為 thefuck 的原因是任何情況下你想說(shuō)“我操”,你都可以用得到 thefuck。theFuck 是一個(gè)高可配置的應(yīng)用,用戶可以開(kāi)啟或關(guān)閉規(guī)則、配置 UI、設(shè)置規(guī)則選項(xiàng)還有進(jìn)行其他的操作。Fuck 的 UI 很簡(jiǎn)單,它允許用戶通過(guò)(上下)箭頭的方式在修正過(guò)的命令列表中進(jìn)行選擇,使用 Enter 來(lái)確認(rèn)選擇,Ctrl+C 來(lái)跳出程序。 不足的是在 Python 標(biāo)準(zhǔn)庫(kù)中沒(méi)有辦法在非 Windows 下不通過(guò) curses 來(lái)讀取鍵盤輸入
5
微型 Python 框架 Flask
Flask 是一個(gè)微型的 Python 開(kāi)發(fā)的 Web 框架,基于Werkzeug WSGI工具箱和Jinja2 模板引擎。 Flask 使用 BSD 授權(quán)。 Flask 也被稱為“microframework”,因?yàn)樗褂煤?jiǎn)單的核心,用 extension 增加其他功能。Flask 沒(méi)有默認(rèn)使用的數(shù)據(jù)庫(kù)、窗體驗(yàn)證工具。然而,F(xiàn)lask 保留了擴(kuò)增的彈性,可以用 Flask-extension 加入這些功能:ORM、窗體驗(yàn)證工具、文件上傳、各種開(kāi)放式身份驗(yàn)證技術(shù)。
6
Python Web 框架 Django
Django 是 Python 編程語(yǔ)言驅(qū)動(dòng)的一個(gè)開(kāi)源模型-視圖-控制器(MVC)風(fēng)格的 Web 應(yīng)用程序框架。但是在Django中,控制器接受用戶輸入的部分由框架自行處理,所以 Django 里更關(guān)注的是模型(Model)、模板(Template)和視圖(Views),稱為 MTV 模式。使用 Django,我們?cè)趲追昼娭畠?nèi)就可以創(chuàng)建高品質(zhì)、易維護(hù)、數(shù)據(jù)庫(kù)驅(qū)動(dòng)的應(yīng)用程序。
7
jQuery-File-Upload
jQuery File Upload 是一個(gè) jQuery 圖片上傳組件,支持多文件上傳、取消、刪除,上傳前縮略圖預(yù)覽、列表顯示圖片大小,支持上傳進(jìn)度條顯示;支持各種動(dòng)態(tài)語(yǔ)言開(kāi)發(fā)的服務(wù)器端。
8
Python 的 HTTP 客戶端庫(kù) requests
requests 是 Python 的一個(gè) HTTP 客戶端庫(kù),跟 urllib,urllib2 類似,那為什么要用 requests 而不用 urllib2 呢?以為 Python 的標(biāo)準(zhǔn)庫(kù) urllib2 提供了大部分需要的 HTTP 功能,但是API太逆天了,一個(gè)簡(jiǎn)單的功能就需要一大堆代碼。 看了 requests 的文檔,確實(shí)很簡(jiǎn)單,尤其適合懶人。
9
計(jì)算機(jī)系統(tǒng)配置管理器 ansible
Ansible 提供一種最簡(jiǎn)單的方式用于發(fā)布、管理和編排計(jì)算機(jī)系統(tǒng)的工具,你可在數(shù)分鐘內(nèi)搞定。Ansible 是一個(gè)模型驅(qū)動(dòng)的配置管理器,支持多節(jié)點(diǎn)發(fā)布、遠(yuǎn)程任務(wù)執(zhí)行。默認(rèn)使用 SSH 進(jìn)行遠(yuǎn)程連接。無(wú)需在被管理節(jié)點(diǎn)上安裝附加軟件,可使用各種編程語(yǔ)言進(jìn)行擴(kuò)展。
10
Web 爬蟲(chóng)框架 scrapy
Scrapy 是 Python 開(kāi)發(fā)的一個(gè)快速,高層次的屏幕抓取和 Web 抓取框架,用戶只需要定制開(kāi)發(fā)幾個(gè)模塊就可以輕松的實(shí)現(xiàn)一個(gè)爬蟲(chóng),用來(lái)抓取網(wǎng)頁(yè)內(nèi)容以及各種圖片,非常之方便。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測(cè)和自動(dòng)化測(cè)試。
Scrapy 吸引人的地方在于它是一個(gè)框架,任何人都可以根據(jù)需求方便的修改。它也提供了多種類型爬蟲(chóng)的基類,如 BaseSpider、sitemap 爬蟲(chóng)等
11
Python 的機(jī)器學(xué)習(xí)項(xiàng)目 scikit-learn
scikit-learn 是一個(gè) Python 的機(jī)器學(xué)習(xí)項(xiàng)目。是一個(gè)簡(jiǎn)單高效的數(shù)據(jù)挖掘和數(shù)據(jù)分析工具。基于 NumPy、SciPy 和 matplotlib 構(gòu)建?;?BSD 源許可證。scikit-learn 的基本功能主要被分為六個(gè)部分,分類,回歸,聚類,數(shù)據(jù)降維,模型選擇,數(shù)據(jù)預(yù)處理
12
神經(jīng)網(wǎng)絡(luò)庫(kù) keras
Keras 是一個(gè)極簡(jiǎn)的、高度模塊化的神經(jīng)網(wǎng)絡(luò)庫(kù),采用 Python(Python 2.7-3.5.)開(kāi)發(fā),能夠運(yùn)行在 TensorFlow 和 Theano 任一平臺(tái),好項(xiàng)目旨在完成深度學(xué)習(xí)的快速開(kāi)發(fā)。keras 的幾大特點(diǎn):文檔齊全、上手快速、純 Python 編寫、關(guān)注度高更新迅速、論壇活躍、就是運(yùn)行速度不太快,當(dāng)然,有的人就是不 care 速度
13
Web 服務(wù)器 Tornado
Tornado 是使用 Python 開(kāi)發(fā)的全棧式(full-stack)Web框架和異步網(wǎng)絡(luò)庫(kù),最早由 Friendfeed 開(kāi)發(fā)。通過(guò)使用非阻塞 IO,Tornado 可以處理數(shù)以萬(wàn)計(jì)的開(kāi)放連接,是 long polling、WebSockets 和其他需要為用戶維護(hù)長(zhǎng)連接應(yīng)用的理想選擇。Tornado 跟其他主流的Web服務(wù)器框架(主要是 Python 框架)不同是采用 epoll 非阻塞 IO,響應(yīng)快速,可處理數(shù)千并發(fā)連接,特別適用用于實(shí)時(shí)的 Web 服務(wù)。
14
Python 解釋器 CPython
CPython 是用C語(yǔ)言實(shí)現(xiàn)的 Python 解釋器,也是官方的并且是最廣泛使用的Python解釋器。除了 CPython 以外,還有用 JAVA 實(shí)現(xiàn)的 Jython 和用 .NET 實(shí)現(xiàn)的 IronPython,使 Python 方便地和 JAVA 程序、.NET 程序集成。另外還有一些實(shí)驗(yàn)性的 Python 解釋器比如 PyPy。
CPython 是使用字節(jié)碼的解釋器,任何程序源代碼在執(zhí)行之前先要編譯成字節(jié)碼。它還有和幾種其它語(yǔ)言(包括C語(yǔ)言)交互的外部函數(shù)接口。
14
工具包 CNTK
來(lái)自微軟公司的 CNTK 工具包的效率,“比我們所見(jiàn)過(guò)的都要瘋狂”。 這部分歸功于 CNTK 可借助圖形處理單元(GPU)的能力,微軟自稱是唯一公開(kāi)“可擴(kuò)展 GPU”功能的公司。(從單機(jī)上的 1 個(gè)、延伸至超算上的多個(gè)) 在與該公司的網(wǎng)絡(luò)化 GPU 系統(tǒng)(稱之為Azure GPU Lab)匹配之后,它將能夠訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)來(lái)識(shí)別語(yǔ)音,讓 Cortana 虛擬助理的速度達(dá)到以前的十倍。 去年 4 月的時(shí)候,CNTK 就已經(jīng)面向研究人員開(kāi)放,只是當(dāng)時(shí)的開(kāi)源授權(quán)限制頗多。不過(guò)現(xiàn)在,它已經(jīng)徹底開(kāi)放了,而深度學(xué)習(xí)的初創(chuàng)者們將最為受益。
Python不能用于大型項(xiàng)目?關(guān)于Python的10大誤解 營(yíng)銷視頻課程
語(yǔ)言多元化是PayPal編程文化中一個(gè)重要的組成部分。在C++和Java長(zhǎng)期流行的同時(shí),更多的團(tuán)隊(duì)選擇了Jva和Scala。同時(shí),Braintree的收購(gòu)也引入了一個(gè)久經(jīng)世故的Ruby社區(qū)。Python作為一門特別的語(yǔ)言,在eBay和PayPal有很長(zhǎng)的歷史。而且其流行程度依然有增不減。
eBay的開(kāi)發(fā)者支持Python這個(gè)應(yīng)用于基層領(lǐng)域多年的語(yǔ)言。甚至在eBay管理層官方支持Python以前,技術(shù)人員就開(kāi)始使用Python。我在幾年前加入PayPal并選擇Python來(lái)寫內(nèi)部應(yīng)用,然而,我卻發(fā)現(xiàn)了PayPal中將近15年以前的Python代碼。
目前,Python 支撐著 超過(guò)50個(gè)項(xiàng)目, 包括:
功能和產(chǎn)品型, 例如 eBay Now 和 RedLaser運(yùn)營(yíng)和基礎(chǔ)設(shè)施型**, 從開(kāi)放的 OpenStack 到專有設(shè)施中間層服務(wù)和應(yīng)用型**, 例如 PayPal 用來(lái)設(shè)定價(jià)格以及檢測(cè)用戶可用功能的那個(gè)(服務(wù)/應(yīng)用)監(jiān)測(cè)代理和接口*型*, 用于涉及到部署和安全的一些用例批處理任務(wù)*型*, 例如數(shù)據(jù)導(dǎo)入,價(jià)格調(diào)整,及其它項(xiàng)目以及不計(jì)其數(shù)的開(kāi)發(fā)者工具
在接下來(lái)的文章里我將詳細(xì)介紹那些使得 eBay 和 PayPal 的 Python 生態(tài)系統(tǒng)從2011年的不超過(guò)25個(gè)工程師到2014年超過(guò)260個(gè)工程師所使用的技術(shù)和舉措。對(duì)于本文,我則會(huì)專注于10個(gè)不得不予以揭露的關(guān)于 eBay 和 PayPal 的企業(yè)環(huán)境的謬誤。
謬誤 #1: Python 是一門新語(yǔ)言
伴隨著所有的初創(chuàng)公司正在使用它以及孩子們最近也在學(xué)習(xí)它的事實(shí),這個(gè)謬誤為何仍然存在是可以理解的。實(shí)際上 Python 已經(jīng) 超過(guò)23歲了, 它最初發(fā)布于1991年, 早于 HTTP 1.0協(xié)議 5年且早于 Java 4年. 目前比較有著名的很早就使用 Python 的例子是在1996年: Google 的第一個(gè)成功的網(wǎng)絡(luò)爬蟲(chóng)。
如果你對(duì)于長(zhǎng)長(zhǎng)的 Python 歷史比較好奇,Python 的作者 Guido van Rossum 已經(jīng)為你準(zhǔn)備好整個(gè)故事。
謬誤 #2: Python 沒(méi)有被編譯
不像 C++ 一樣需要一個(gè)獨(dú)立的編譯器工具鏈,Python 實(shí)際上被編譯成了字節(jié)碼,和 Java 或者許多其他的編譯型語(yǔ)言十分相似。更進(jìn)一步的編譯過(guò)程,如果有的話, 取決于運(yùn)行時(shí)環(huán)境, 不管是 CPython,PyPy,Jython/JVM,IronPython/CLR,或是其它的進(jìn)程式虛擬機(jī)(process virtual machine)。參考 謬誤 #6 來(lái)了解更多。
一條在 PayPal 以及其它地方的通用原則就是,(應(yīng)用的)安全性不能依賴于代碼的已編譯狀態(tài)。更為重要的是加強(qiáng)運(yùn)行時(shí)環(huán)境的安全,因?yàn)閷?shí)質(zhì)上每種語(yǔ)言都有一個(gè)解碼器,或者能被攔截并導(dǎo)出受保護(hù)的狀態(tài)。參考下一條謬誤來(lái)了解更多的 Python 安全性問(wèn)題。
謬誤 #3: Python 不安全
輕量級(jí) Python 的親和力可能使他看起來(lái)不怎么可怕,但是這里直覺(jué)很大程度上是受到了誤導(dǎo)的. 安全的一個(gè)核心原則就是盡可能讓呈現(xiàn)的目標(biāo)更小. 大系統(tǒng)是違背安全原則的,因?yàn)樗麄冓呄蛴?使行為過(guò)渡集中化, 并且也 讓開(kāi)發(fā)者難于理解. Python 通過(guò)倡導(dǎo)簡(jiǎn)潔化來(lái)邊緣化這些惡心的問(wèn)題. 更有甚者, CPython 通過(guò)讓自己成為一個(gè)簡(jiǎn)單、穩(wěn)定并且易于審核的虛擬機(jī)來(lái)使這些問(wèn)題得到解決. 事實(shí)上,近期 Coverity Software 的一個(gè)分析結(jié)果顯示 CPython 得到了他們的最高質(zhì)量評(píng)級(jí)。
Python 還擁有一系列可擴(kuò)展的開(kāi)源、產(chǎn)業(yè)標(biāo)準(zhǔn)化的安全庫(kù)序列. 在PayPal, 我們把安全和授信看做是重中之重, 我們發(fā)現(xiàn) hashlib, PyCrypto, 以及 OpenSSL, 通過(guò) PyOpenSSL 和我們自己的定制構(gòu)建的結(jié)合,涵蓋了 PayPal 多樣化的安全和性能需求。
這些諸多的原因,使得 Python 成為PayPal(和eBay)的應(yīng)用程序安全團(tuán)隊(duì)在某些業(yè)務(wù)中最快的選擇. 這里有把Python用在PayPal的安全第一環(huán)境中的幾個(gè)以安全為基礎(chǔ)應(yīng)用程序:
創(chuàng)建安全代理,以促進(jìn)密鑰的輪換以并鞏固加密實(shí)現(xiàn)同業(yè)界領(lǐng)先的 HSM 技術(shù)集成為缺乏兼容性的技術(shù)棧構(gòu)建受TLS保護(hù)的封裝代理為我們內(nèi)部的互相認(rèn)證計(jì)劃生成鍵和證書開(kāi)發(fā)主動(dòng)的漏洞掃描器
另外,還有無(wú)數(shù)存在安全隱患的用Python構(gòu)建,面向操作的系統(tǒng), 諸如防火墻和連接管理. 未來(lái),我們一定回去深入的整合PayPal Python的安全事項(xiàng).
謬誤 #4: Python 是一門腳本語(yǔ)言
Python 確實(shí)可以用來(lái)編寫腳本,并且因其簡(jiǎn)單的語(yǔ)法、跨平臺(tái)并且無(wú)所不在于 Linux, Macs, 和其它Unix 機(jī)器而成為這個(gè)領(lǐng)域的領(lǐng)跑者之一。
事實(shí)上, Python 可能是常規(guī)用途編程語(yǔ)言中最靈活的技術(shù). 以下是一些實(shí)例:
電信基礎(chǔ)設(shè)施 (Twilio)支付系統(tǒng) (PayPal, Balanced Payments)神經(jīng)科學(xué)和心理學(xué) (許多, 許多, 例子)數(shù)值分析和工程 (numpy, numba, 以及 更多其它)動(dòng)畫(LucasArts, Disney, Dreamworks)游戲后臺(tái) (Eve Online, Second Life, Battlefield, 以及 其它很多)Email 基礎(chǔ)設(shè)施 (Mailman, Mailgun)媒體存儲(chǔ)和處理 (YouTube, Instagram, Dropbox)操作和系統(tǒng)管理 (Rackspace, OpenStack)自然語(yǔ)言處理(NLTK)機(jī)器學(xué)習(xí)和計(jì)算機(jī)版本 (scikit-learn, Orange, SimpleCV)安全性和滲透性測(cè)試 (很多很多 以及 eBay/PayPal大數(shù)據(jù) (Disco, Hadoop support)如理 (Calendar Server, 它 驅(qū)動(dòng)了 Apple iCal)搜索系統(tǒng) (ITA, Ultraseek, 還有 Google)Internet 基礎(chǔ)設(shè)施 (DNS) (BIND 10)
更別提網(wǎng)站和web服務(wù)了,那些都不在少數(shù). 事實(shí)上,PayPal工程師看起來(lái)像是有興趣致力于基于Python的web特性,比如 YouTube 和 Yelp. 如果對(duì)Python成功案例的更大清單感興趣,那就看看官方的清單吧.
謬誤 #5: Python 是弱類型的
Python 類型系統(tǒng)的特點(diǎn)是擁有強(qiáng)大、靈活的類型操作. 維基百科上對(duì)此作出的闡述.
而存在一個(gè)不爭(zhēng)而有趣的事實(shí)是, Python 是比Java更加強(qiáng)類型的. Java 對(duì)于原生類型和對(duì)象區(qū)分了類型系統(tǒng),它讓null存在于一個(gè)灰色地帶. 另一方面,現(xiàn)代的 Python 擁有一個(gè)統(tǒng)一的強(qiáng)類型系統(tǒng), 其中什么都沒(méi)有 的類型是明確指定的. 更進(jìn)一步的,JVM自身也是動(dòng)態(tài)類型的,因?yàn)榭梢园阉?根源 追溯到由Sun所收購(gòu)的Smalltalk VM的一個(gè)實(shí)現(xiàn)。
Python的類型系統(tǒng) 很棒,但要提供給企業(yè)級(jí)使用,目前仍然還有許多更重大的事項(xiàng)需要關(guān)注。
謬誤 #6: Python 速度慢
首先是有一個(gè)重要區(qū)別: Python 是一門編程語(yǔ)言,而不是運(yùn)行時(shí)環(huán)境. Python 擁有幾個(gè)實(shí)現(xiàn):
CPython是參考實(shí)現(xiàn), 且也是廣泛發(fā)布和使用的實(shí)現(xiàn).Jython是Python用于JVM的是一個(gè)成熟的實(shí)現(xiàn).IronPython是 Microsoft 針對(duì)其自家的通用語(yǔ)言運(yùn)行時(shí)——又名 .NET,實(shí)現(xiàn)的Python .PyPy是一個(gè)正在日趨成熟的Python實(shí)現(xiàn),擁有JIT編譯,增量垃圾收集諸多先進(jìn)的特性.每一個(gè)運(yùn)行時(shí)都有其自己的性能特點(diǎn), 而且他們本身也不慢. 這里更重要的地方在于不能錯(cuò)誤地把一個(gè)性能指標(biāo)分派到一門編程語(yǔ)言智商. 應(yīng)該總是把該評(píng)估用在一個(gè)應(yīng)用程序運(yùn)行時(shí)上面,最好是針對(duì)一個(gè)特定的使用場(chǎng)景。
清楚了那些事項(xiàng)之后,下面就是一些有Python提供的小項(xiàng),體現(xiàn)其重要的性能優(yōu)勢(shì):
把 NumPy 用作 Intel 的 MKL SIMD接口PyPy的 JIT 編譯能 達(dá)到比C還快的性能Disqus 能在同樣的100個(gè)盒子上容納兩億五千萬(wàn)到5億用戶
誠(chéng)然,這些都不是最新的列子,只是我個(gè)人的最愛(ài)罷了. 這將很容易扯到高性能Python以及獨(dú)立提供的運(yùn)行時(shí)這些廣闊的領(lǐng)域. 我們不應(yīng)只是專注于解決單個(gè)特殊的案例, 而是應(yīng)該把注意力放在對(duì)開(kāi)發(fā)人員在 最終產(chǎn)品性能 方面的生產(chǎn)力的普遍影響上面, 特別是在一種企業(yè)級(jí)環(huán)境之下。
C++ vs Python,. 兩種語(yǔ)言在同一個(gè)輸出下的對(duì)比.
給定足夠的時(shí)間,一個(gè)循規(guī)蹈矩的開(kāi)發(fā)者只會(huì)按照下面這種經(jīng)過(guò)論證的方式來(lái)編寫精確高效的軟件:
設(shè)計(jì)實(shí)現(xiàn)一個(gè)可以正確完成任務(wù)的軟件,包括開(kāi)發(fā)單獨(dú)的測(cè)試測(cè)試性能,明確瓶頸優(yōu)化,根據(jù)測(cè)試和Amdahl法則,并且利用Python與C的淵源
雖然這聽(tīng)起來(lái)很簡(jiǎn)單,但是即使是老道的工程師,這依舊是一個(gè)非常耗時(shí)的過(guò)程。Python設(shè)計(jì)之初就考慮到了這一套開(kāi)發(fā)流程。根據(jù)我們的經(jīng)驗(yàn),通常C++和Java項(xiàng)目完成一次迭代流程的時(shí)間,夠Python項(xiàng)目完成三次迭代流程。今天,PayPal和eBay中不乏有Python項(xiàng)目使用更少的代碼戰(zhàn)勝了同類C++和Java項(xiàng)目,這多虧了快速的開(kāi)發(fā)使得仔
細(xì)的裁剪和優(yōu)化變得可能。
Myth #7: Python無(wú)法做到大規(guī)模
大規(guī)模有許多定義,但無(wú)論怎樣,YouTube是個(gè)大規(guī)模網(wǎng)站。每月UV超過(guò)十億,每分鐘上傳的視頻時(shí)長(zhǎng)超過(guò)100小時(shí),占用互聯(lián)網(wǎng)帶寬的20%,所有這一切都以Python作為核心技術(shù)。Dropbox,Disqus, Eventbrite, Reddit, Twilio, Instagram, Yelp, EVE Online, Second Life,,以及,是的,以及eBay和PayPal中都有Python大規(guī)模的例子,這些證明大規(guī)模不僅僅是可能:它是一種模式。
成功的關(guān)是鍵簡(jiǎn)單性且一致性。CPython,Python的主要虛擬機(jī),其最大限度地放大了這些特性,從而演變出了一個(gè)精確可測(cè)的運(yùn)行時(shí)。人們很難發(fā)現(xiàn) Python程序員關(guān)心垃圾的收集暫停或應(yīng)用地啟動(dòng)時(shí)間。擁有強(qiáng)大的平臺(tái)和網(wǎng)絡(luò)支持,Python其本身自然而然的智能水平可擴(kuò)展,BitTorrent就是其充分的體現(xiàn)。
此外,規(guī)?;饕w測(cè)量和迭代。Python是以分析和優(yōu)化為要義建立的??碝yth #6了解更多Python如何垂直拓展的細(xì)節(jié)。
Myth #8: Python缺少好的并發(fā)支持
除了偶爾叫囂性能和規(guī)?;膯?wèn)題,有人想提的技術(shù)些,”Python缺乏并發(fā),”或者,”GIL怎么樣?”如果幾十個(gè)反例仍不足以支持Python水平及垂直拓展規(guī)模的能力,那么再更深地解釋CPython實(shí)現(xiàn)細(xì)節(jié)也不會(huì)有幫助,所以我會(huì)簡(jiǎn)短些。
Python擁有強(qiáng)大的并發(fā)原語(yǔ),包括generators, greenlets, Deferreds, 和futures.。Python有優(yōu)秀的并發(fā)框架,包括eventlet, gevent,和Twisted。Python在定制運(yùn)行時(shí)尚投入了驚人的工作量,包括Stackless和 PyPy。所有煩人這些和更多表明,根本不存工程師們?cè)赑ython并發(fā)編程方面的缺憾。同時(shí),所有這些都正在被正式的在企業(yè)生產(chǎn)環(huán)境中支持或使用。例如,請(qǐng)參考Myth #7。
全局解釋器鎖,或稱GIL,是Python在大多數(shù)應(yīng)用場(chǎng)景下的性能優(yōu)化,也是幾乎所有CPython實(shí)現(xiàn)代碼的開(kāi)發(fā)上的基礎(chǔ)優(yōu)化。GIL使得Python可以很便利地使用操作系統(tǒng)的線程或輕線程(通常指greenlets),且不影響使用多進(jìn)程。更多相關(guān)信息,請(qǐng)看該主題的Q&A列表,以及Python文檔中的介紹。
在PayPal中,一個(gè)典型服務(wù)的部署需要多臺(tái)機(jī)器,多個(gè)進(jìn)程,多個(gè)線程,以及一個(gè)數(shù)字非常龐大的greenlets,相當(dāng)于一個(gè)非常強(qiáng)大可擴(kuò)展的并行環(huán)境(見(jiàn)下圖)。在大多數(shù)的企業(yè)環(huán)境中,團(tuán)隊(duì)更傾向于往更高層次過(guò)度,謹(jǐn)慎并注重災(zāi)難恢復(fù)。然而,在某些情況下,每臺(tái)機(jī)器每天Python服務(wù)仍然處理數(shù)以百萬(wàn)計(jì)的請(qǐng)求,而且輕松處理。
一個(gè)基于單一worker的協(xié)同異步架構(gòu)草圖。最外層的盒子是進(jìn)程,下一個(gè)層次為線程,這里這些線程都是輕線程。操作系統(tǒng)處理線程間的搶占,而I/O異步協(xié)同合作。
謬誤 #9: Python 程序員很稀缺
事實(shí)上,現(xiàn)在使用 Python 的 web 開(kāi)發(fā)者的確沒(méi)有使用 PHP 或者 Java 的 web 開(kāi)發(fā)者多。這可能主要是由于企業(yè)需求和教育之間的相互作用導(dǎo)致的,不過(guò) 教育領(lǐng)域(教學(xué)所使用的編程語(yǔ)言)的趨勢(shì)使得情況可能產(chǎn)生變化 。
也就是說(shuō),使用 Python 的開(kāi)發(fā)者并不稀缺?,F(xiàn)在全世界有數(shù)百萬(wàn)使用 Python 的開(kāi)發(fā)者。已有幾十個(gè)Python 技術(shù)大會(huì)、 StackOverflow 上成千上萬(wàn)的 Python 內(nèi)容問(wèn)答、雇傭大量使用 Python 的開(kāi)發(fā)者的大企業(yè)比如 YouTube 、 美國(guó)銀行( Bank of American )和 LucasArts/Dreamworks 等等,這些都顯而易見(jiàn)地證實(shí)了這一點(diǎn)。在 eBay 和 PayPal 我們一直保持擁有幾百位使用 Python 的正式開(kāi)發(fā)者,這是怎么做到的呢?
那么,當(dāng)一個(gè)項(xiàng)目被創(chuàng)建時(shí)為什么它會(huì)被首推?對(duì)于孩子來(lái),大學(xué)生和教授們來(lái)說(shuō),Python作為第一門程序設(shè)計(jì)語(yǔ)言是非常易于學(xué)習(xí)的。在eBay,僅僅需要一個(gè)星期,一個(gè)新的Python程序員就能展示一個(gè)真正的成果,并且他們開(kāi)始散發(fā)光芒常常只要2-3個(gè)月,通過(guò)Internet的寶藏(互動(dòng)式教程,書,文檔和開(kāi)源代碼庫(kù))一切皆有可能。
另外一個(gè)重要的考慮因素是,項(xiàng)目使用Python會(huì)更簡(jiǎn)單,它不會(huì)像其他項(xiàng)目那樣需要那么多的開(kāi)發(fā)者。在謬誤6和謬誤9中提到的那樣,在Python項(xiàng)目中,學(xué)習(xí)像Instagram那樣的高效團(tuán)隊(duì)是一個(gè)常見(jiàn)的比喻,并且這確實(shí)是我們?cè)趀Bay和PayPal的經(jīng)驗(yàn)。
Myth #10: Python不適應(yīng)于大項(xiàng)目
Myth #7 討論了大規(guī)模運(yùn)行Python的項(xiàng)目,但開(kāi)發(fā)Python大規(guī)模項(xiàng)目是什么情況呢?正如在Myth #9中提到的,大多數(shù)Python不被人看好。 然而Instagram在其被億元美金收購(gòu)當(dāng)天達(dá)到千萬(wàn)的點(diǎn)擊量,而整個(gè)公司只有十幾個(gè)人。Dropbox在2011年只有70個(gè)工程師,其他團(tuán)隊(duì)更少。所以,Python適合大規(guī)模團(tuán)隊(duì)嗎?
美國(guó)銀行實(shí)際上有超過(guò)5000的Python開(kāi)發(fā)者,一個(gè)單獨(dú)的項(xiàng)目超過(guò)一千萬(wàn)行Python代碼。JP摩根也經(jīng)歷了類似的轉(zhuǎn)變。YouTube也有數(shù)千的開(kāi)發(fā)者和數(shù)百萬(wàn)行的代碼。大規(guī)模產(chǎn)品和團(tuán)隊(duì)每天都在使用Python,因?yàn)樗哂辛己玫哪K化和封裝特性,在特定方面許多的大規(guī)模開(kāi)發(fā)建議是一致的。工具,強(qiáng)大的慣例以及代碼審查促使了項(xiàng)目規(guī)?;芾淼默F(xiàn)實(shí)。
幸運(yùn)的是,Python發(fā)展于上面所提到的好的奠基。我們?cè)跈z查執(zhí)行使用pyflakes以及其他工具進(jìn)行Python代碼的靜態(tài)分析,正如堅(jiān)持PEP8——Python語(yǔ)言的基礎(chǔ)風(fēng)格指南。
最后,應(yīng)該指出的是,除了調(diào)度加速M(fèi)yth #6以及#7中所提到的,使用Python的項(xiàng)目通常需要更少的開(kāi)發(fā)者。我們常見(jiàn)的成功案例中,使用Java或C++的項(xiàng)目通常有3-5開(kāi)發(fā)者耗時(shí)2-6個(gè)月,最終由單一的開(kāi)發(fā)者在2-6周(或小時(shí),因?yàn)檫@些原因)完成?...