隨著移動互聯(lián)網(wǎng)的普及,服務器運維所面臨的挑戰(zhàn)也隨之越來越大闻鉴。當規(guī)模增長到一定程度帜讲,手動管理方式已經(jīng)無法應對,自動化運維成為解決問題的銀彈椒拗。Python憑借其靈活性似将,在自動化運維方面已經(jīng)被廣泛使用,能夠大大提高運維效率蚀苛,服務器集群的規(guī)模越大在验,優(yōu)勢越明顯。下面一些知識有助于你開始進入Python的世界堵未。
很多人學習python腋舌,不知道從何學起。
很多人學習python渗蟹,掌握了基本語法過后块饺,不知道在哪里尋找案例上手赞辩。
很多已經(jīng)做案例的人,卻不知道如何去學習更加高深的知識授艰。
那么針對這三類人辨嗽,我給大家提供一個好的學習平臺,免費領(lǐng)取視頻教程淮腾,電子書籍糟需,以及課程的源代碼!??¤
QQ群:1057034340
1.Python適用于哪些應用場景谷朝?
這個沒有固定答案洲押,很多人都說Python不適合開發(fā)GUI的程序,但Python自己的IDE——IDEL和第三方的IDE——Eric就是Python寫的圆凰。
目前看到的更多的人是拿來寫Web杈帐,使用如Django、web.py框架专钉,沒記錯Flask也是挑童。
也有一個情況用的比較多,用Python當膠水驶沼,與各種語言結(jié)合炮沐,共同完成某軟件功能,注意觀察也許你會發(fā)現(xiàn)在安裝一些軟件的時候會有Python的身影回怜。
我個人還拿Python模擬過端口轉(zhuǎn)發(fā)和DNS服務等大年,所以真的是要看真么用,而不是能怎么用玉雾。
另外大數(shù)據(jù)分析Python也是比較適合的翔试,從載入到分析,再到保存結(jié)果等复旬,Python有一整套的模塊應對垦缅。
2.Python能夠勝任大數(shù)據(jù)嗎?
Python很適合做大數(shù)據(jù)相關(guān)的分析驹碍,內(nèi)置的C編譯的模塊能應對常見的操作壁涎,個別極端的算法建議用C重寫相關(guān)模塊。
Python本身的特點更多的是高效率的開發(fā)和簡單的維護志秃,速度交給C去吧怔球,更多的問題其實出自寫代碼的人沒有更好的使用,而不是效率不夠高浮还。比如排序竟坛,本來Python有非常高效的內(nèi)置C編譯的模塊,卻非要自己寫算法,這樣的結(jié)果不慢都是奇怪的担汤。
另外還要看需求是CPU密集型涎跨,還是IO密集型,如果是CPU密集型建議這部分操作由C實現(xiàn)崭歧,IO密集型的效率不會因為Python而有多少改變隅很。
C的效率是高,但框架搭起來也費勁驾荣,所以還是結(jié)合著來吧外构,也因此普泡,Python被稱為膠水語言播掷。
3.Python是否可以完全代替Shell?
完全可以撼班,Shell的功能Python均可實現(xiàn)歧匈,而且代碼量更少、結(jié)構(gòu)更優(yōu)砰嘁、可閱讀性更好件炉,而Python可實現(xiàn)的功能Shell卻不一定能,如運維中會用到的用于網(wǎng)絡通信的Socket模塊矮湘、用于WEB的Django框架斟冕、用于性能采集的psutil模塊等,而且Shell對操作系統(tǒng)的命令依賴性較強缅阳,Python可在更大程度上規(guī)避磕蛇。
在一個Shell的IDE是個很大的問題,雖然Python的原生IDE不怎么樣十办,但第三方的IDE還是功能十分強大的秀撇,雖然不能和微軟的Virtual Studio相媲美,但也是能完全滿足Python的開發(fā)需求的向族。
再說下Python的效率問題呵燕,Python支持多進程、多線程以及協(xié)程(比線程更小一級)件相,程序并發(fā)度是在Shell之上的再扭。Python的核心模塊基本都是用C實現(xiàn)的,因此效率更高夜矗。如有必要也可能將需要用Python實現(xiàn)的Python模塊用C重寫以提高效率泛范,當然也可以直接用C Python,一個直接完全用C實現(xiàn)的Python解釋器侯养。
4.Python是否可以訪問常見的數(shù)據(jù)庫敦跌?
可以,Python可以訪問常見的各種數(shù)據(jù)庫,如Oracle柠傍、MySQL麸俘、Vertica、SQLServer等惧笛,加載相應的模塊即可从媚,模塊列表如下:
Oracle:cx_Oracle
MySQL:MySQLdb
5.Python開發(fā)是面向過程、函數(shù)還是對象患整?
Python雖然是解釋型語言拜效,但從設計之初就已經(jīng)是一門面向?qū)ο蟮恼Z言,對于Python來說一切皆為對象各谚。正因為如此紧憾,在Python中創(chuàng)建一個類和對象是很容易的,當然如果習慣面向過程或者函數(shù)的寫法也是可以的昌渤,Python并不做硬性的限制赴穗。
Python的面向?qū)ο筇卣魅缦拢?/p>
1.封裝
面向?qū)ο蟪绦蛟O計中的術(shù)語對象(Object)基本上可以看做數(shù)據(jù)(特性)以及由一系列可以存取、操作這些數(shù)據(jù)的方法所組成的集合膀息。傳統(tǒng)意義上的“程序= 數(shù)據(jù)結(jié)構(gòu)+算法”被封裝”掩蓋“并簡化為“程序=對象+消息”般眉。對象是類的實例,類的抽象則需要經(jīng)過封裝潜支。封裝可以讓調(diào)用者不用關(guān)心對象是如何構(gòu)建的而直接進行使用甸赃。
2.繼承
類繼承:
繼承給人的直接感覺是這是一種復用代碼的行為。繼承可以理解為它是以普通的類為基礎(chǔ)建立專門的類對象冗酿,子類和它繼承的父類是IS-A的關(guān)系埠对。
多重繼承:
不同于C#,Python是支持多重類繼承的(C#可繼承自多個Interface已烤,但最多繼承自一個類)鸠窗。多重繼承機制有時很好用,但是它容易讓事情變得復雜胯究。
3.多態(tài)
多態(tài)意味著可以對不同的對象使用同樣的操作稍计,但它們可能會以多種形態(tài)呈現(xiàn)出結(jié)果。在Python中裕循,任何不知道對象到底是什么類型臣嚣,但又需要對象做點什么的時候,都會用到多態(tài)剥哑。方法是多態(tài)的硅则,運算符也是多態(tài)的。
6.如何快速掌握Python株婴?
閱讀官方文檔即可滿足日常需求怎虫,官方文檔有中文翻譯(http://www.pythondoc.com/)暑认,更加方便學習。但這些都是基礎(chǔ)的語法和常見的模塊大审,Python學習重要的是模塊蘸际,快速、高效的開發(fā)依賴的是模塊的應用徒扶,站在前人的肩膀會省時省力的多粮彤。
但學習Python其實最重要的是學習模塊,而非語法本身姜骡,Python的語法十分簡單导坟,只要大學學過C或者數(shù)據(jù)結(jié)構(gòu)課程,甚至完全沒學過的人也是可以輕松掌握的圈澈。掌握了語法已經(jīng)可以實現(xiàn)Shell的功能惫周,但要想提高模塊的學習必不可少,如運維人員經(jīng)常用的有:
psutil:獲取性能信息
socket:基本網(wǎng)絡通信
IPy:IP地址相關(guān)處理
dnsptyhon:域名相關(guān)處理
difflib:文件比較
pexpect:屏幕信息獲取士败,常用于自動化
paramiko:SSH客戶端
XlsxWriter:Excel相關(guān)處理
其他還有很多很多功能模塊闯两,每天也不斷的有新的模塊褥伴、框架谅将、組件產(chǎn)生,如用于與Java Script做橋接的PythonJS重慢,甚至Python還可以編寫Map和Reduce饥臂。
7.Python是否有專用的IDE工具?
有似踱,IDEL用Python實現(xiàn)的Python的IDE工具隅熙,但說實話,功能真心不咋地核芽。我個人常用的IDE如下:
PyCharm
PyCharm是JetBrains開發(fā)的Python IDE囚戚。PyCharm用于一般IDE具備的功能,比如轧简,調(diào)試驰坊、語法高亮、Project管理哮独、代碼跳轉(zhuǎn)拳芙、智能提示、自動完成皮璧、單元測試舟扎、版本控制……另外,PyCharm還提供了一些很好的功能用于Django開發(fā)悴务,同時支持Google App Engine睹限,更酷的是,PyCharm支持IronPython!
Wing IDE
Wingware的Python IDE兼容Python 2.x和3.x羡疗,可以結(jié)合Django删窒,matplotlib,Zope顺囊, Plone肌索,App Engine,PyQt特碳,PySide诚亚,wxPython,PyGTK午乓,Tkinter站宗,mod_wsgi,pygame益愈,Maya梢灭,MotionBuilder,NUKE蒸其,Blender和其他Python框架使用敏释。Wing支持測試驅(qū)動開發(fā),集成了單元測試摸袁,nose和Django框架的執(zhí)行和調(diào)試功能钥顽。Wing IDE啟動和運行的速度都非常快靠汁,支持Windows蜂大,Linux,OS X和Python versi蝶怔。
NotePad++
簡單奶浦、方便,但僅適合臨時性的更改踢星。
其他的還有:Eclipse withPyDev澳叉、Sublime Text、Komodo Edit斩狱、PyScripter耳高、The Eric Python IDE、Interactive Editor for Python
8.運用Python實現(xiàn)系統(tǒng)自動化監(jiān)控有哪些常用方法所踊?
準確的說應該是有哪些模塊泌枪,健康監(jiān)控肯定要有psutil來監(jiān)控性能,還會用到通信的Socket秕岛,登陸的Paramiko碌燕、telnetlib误证,ftp的ftplib。
原理基本就是采集數(shù)據(jù)——本地處理數(shù)據(jù)——傳輸數(shù)據(jù)修壕,如果做的比較完善可以再做個呈現(xiàn)數(shù)據(jù)愈捅,也可以吧數(shù)據(jù)發(fā)送給Zabbix等開源工具。
個人還用一個開源監(jiān)控網(wǎng)絡刺探的慈鸠,超過指定次數(shù)就自動封殺蓝谨,需要的可以找我要下載地址。
9.Python可運行在那些平臺青团?跨平臺性如何譬巫?
支持常見的主流平臺,如AIX督笆、HPUX芦昔、Solaris、Linux娃肿、Windows等咕缎,除Windows外常見的Unix、Linux平臺均帶有原生的Python料扰,但版本一般較低凭豪。關(guān)于跨平臺和他跨平臺語言一樣,要注意有些個別模塊是單一平臺特有的记罚,整體的跨平臺性還是很好的墅诡,不必為適應多平臺寫多套代碼。
但這不是說一點限制都沒有:首先桐智,同一個版本的中間文件.py和.pyc以及.pyo是跨平臺的;其次烟馅,PC與移動終端说庭,如:手機、Pad不可跨平臺(原因見下一條)郑趁;最后刊驴,不能跨處理器構(gòu)架,如:Intel與ARM寡润,64位與32位捆憎。
10.如何利用Python提高開發(fā)效率?
因為Python很多底層的東西不用自己寫梭纹,模塊資源豐富躲惰,運用得當開發(fā)效率當然會提升,而且各種框架也為快速開發(fā)提供了基礎(chǔ)变抽。
11.Python運行速度如何础拨?
通常Java的速度比Python快些氮块。Python調(diào)用C擴展除外(也可以直接用CPython)。
對于Python速度太慢的批評诡宗,Python語言作者Guido van Rossum說:
如果你開發(fā)的系統(tǒng)發(fā)現(xiàn)了性能瓶頸滔蝉,通常最有效率的做法是找到出問題的代碼塊,用速度較快的語言如C或C++寫一些代碼替換該功能或該模塊塔沃,而不是用C或C++重寫整個系統(tǒng)蝠引,因為對大部分代碼而言,語言的速度是無關(guān)緊要的蛀柴。