Python后臺(tái)處理模塊接入的緣由

前面的后臺(tái)搭建都是基于Java EE的,但后面隨著對(duì)機(jī)器學(xué)習(xí)的深入,慢慢發(fā)現(xiàn)大多數(shù)機(jī)器學(xué)習(xí)的算法實(shí)現(xiàn)都是基于Python和R語言的。R語言主要集中在對(duì)數(shù)據(jù)的預(yù)處理、分析和展示,而Python不但囊括了R語言的功能,還延伸到了網(wǎng)絡(luò)請(qǐng)求、Web服務(wù)、數(shù)據(jù)抓取等方方面面。Python不但在語法上入門簡(jiǎn)單、在開發(fā)環(huán)境的搭建上相對(duì)容易,開發(fā)IDE也很完善易用。在機(jī)器學(xué)習(xí)領(lǐng)域有很多現(xiàn)成的算法庫,開源工具包非常完備。Python一旦入門,絕對(duì)會(huì)對(duì)它愛不釋手的 :)
Python學(xué)習(xí)的個(gè)人經(jīng)驗(yàn)
既然是個(gè)人經(jīng)驗(yàn),就要先交代下自己在學(xué)習(xí)python之前的編程經(jīng)歷。從大學(xué)一年級(jí)接觸C語言,并在大學(xué)二年級(jí)在電子設(shè)計(jì)競(jìng)賽中投入真正的開發(fā)使用,直到進(jìn)入互聯(lián)網(wǎng)公司之前,都是在使用C語言做底層驅(qū)動(dòng)和中間件開發(fā),使用C++做業(yè)務(wù)邏輯開發(fā)。進(jìn)入互聯(lián)網(wǎng)之后開始接觸Java,并進(jìn)行Android中間件和應(yīng)用開發(fā)。在業(yè)余時(shí)間自學(xué)了Java EE的開發(fā)流程并了解了Web前端開發(fā)的基礎(chǔ)知識(shí)。
我的Python學(xué)習(xí)比較簡(jiǎn)略:
快速入門
在網(wǎng)上看一篇關(guān)于Python的入門帖子,比如www.runoob.com/python/python-basic-syntax.html,在這個(gè)過程中了解語言特性和基本語法、搭建基本的運(yùn)行環(huán)境,這個(gè)過程1~2個(gè)小時(shí)足矣。
全局把握
對(duì)Python有了基本的了解和認(rèn)識(shí)后找一本大而全的教科書,比如《Python基礎(chǔ)教程》(我找了本電子版),這是一本很厚的書。然后查看目錄,并逐頁“掃讀”(所謂“掃讀”就是非常快速的粗略閱讀和跳讀,在閱讀的過程中并不需要逐行逐句,而是要粗枝大葉)。對(duì)于“魔法方法、屬性和迭代器”這樣的章節(jié)可以仔細(xì)研讀,對(duì)于“條件、循環(huán)和其他語句”這樣的章節(jié)可以一掃而過、對(duì)于“圖形用戶界面”這樣的章節(jié)則可以直接跳過不看。整個(gè)過程的一個(gè)核心思想是:
1. 對(duì)比閱讀,發(fā)掘Python相對(duì)于自己以往掌握的語言有哪些相同點(diǎn)和不同點(diǎn);
2. 系統(tǒng)把握,明了整個(gè)Python語言的系統(tǒng)體系和知識(shí)組成;
3. 確定目標(biāo),掃讀的目標(biāo)是在后續(xù)如果遇到相應(yīng)的Python問題,能夠快速的定位到具體的知識(shí)點(diǎn),并查詢答案(這本大厚書可以在以后作為字典類的工具書使用)
第二個(gè)步驟需要半天到一天的時(shí)間。
工程實(shí)踐
在Python終端敲簡(jiǎn)單的命令顯然無法滿足我們的工程需要,一個(gè)完整的工程開發(fā)需要便捷的開發(fā)工具和清晰的模塊關(guān)系。這里我使用DevPy+Eclipse搭建IED開發(fā)環(huán)境,工程中引入包、模塊、類等Python特性來明晰項(xiàng)目中的模塊關(guān)系。在開發(fā)中遇到問題則通過查詢《Python基礎(chǔ)教程》或在網(wǎng)上搜尋解決方法。
Python后臺(tái)處理模塊的功能和接入方式
Python的后臺(tái)處理模塊主要用來做機(jī)器學(xué)習(xí)相關(guān)的處理工作。Python模塊引入了Tornado Web引擎,對(duì)外以REST API的形式提供服務(wù)。所以簡(jiǎn)單的說Python的后臺(tái)處理模塊也是像基于Java EE一樣的Http Web服務(wù)。
后記(自己的語言學(xué)習(xí)感悟)
匯編語言
對(duì)于匯編語言相信絕大多數(shù)同學(xué)除了在《微機(jī)原理》的實(shí)驗(yàn)課上使用過之外,應(yīng)該在真實(shí)工作中很少有接觸,即便對(duì)于很多嵌入式開發(fā)的同學(xué)在工作中也很難接觸的到。我在工作中唯一的實(shí)踐經(jīng)歷是修改中斷向量表。是在一個(gè)沒有MMU的MCU上保證運(yùn)行的ucOS系統(tǒng)能夠有獨(dú)立的Bios、Bootloader、App三個(gè)獨(dú)立的運(yùn)行空間。當(dāng)時(shí)的解決方案是使用兩級(jí)中斷向量表:硬件觸發(fā)中斷后會(huì)自動(dòng)跳轉(zhuǎn)到第一級(jí)的中斷向量表,而第一級(jí)的中斷向量表直接指向第二級(jí)中斷向量表。第二級(jí)中斷向量表會(huì)通過檢查硬件管腳的狀態(tài)轉(zhuǎn)跳到Bios、Bootloader、App不同空間的處理代碼段。匯編語言的學(xué)習(xí)重點(diǎn)不是語言本身,而是機(jī)器運(yùn)行的機(jī)制。
C語言
相比于匯編C語言確實(shí)算是高級(jí)語言了。對(duì)于互聯(lián)網(wǎng)的同學(xué)來說C語言的語法很簡(jiǎn)單,C語言的指針又很眩暈,在功能開發(fā)上,很簡(jiǎn)單的事情要寫上一大堆代碼。其實(shí)業(yè)務(wù)開發(fā)并不是C語言的優(yōu)勢(shì)所在,C語言更多是為了取代匯編,同樣C語言的學(xué)習(xí)重點(diǎn)也不在于語言本身,更在于對(duì)系統(tǒng)運(yùn)行機(jī)制的理解,所以,C語言更多的應(yīng)用場(chǎng)景是驅(qū)動(dòng)開發(fā)和協(xié)議解析。
C++
相比于C語言,C++對(duì)業(yè)務(wù)邏輯的處理能力大大增強(qiáng),同時(shí),設(shè)計(jì)模式在C++中的應(yīng)用也變得得心應(yīng)手。但C++只能算的上C語言的升級(jí)版,作為程序員,并不能完全脫離系統(tǒng)原理的限制,將全部的注意力放在業(yè)務(wù)邏輯的實(shí)現(xiàn)上。但劣勢(shì)同樣也是優(yōu)勢(shì),正是C++同系統(tǒng)的相關(guān)性才使得C++在嵌入式設(shè)備和實(shí)時(shí)性較高的核心中間件領(lǐng)域留有一席之地。
Java
相對(duì)于C++,Java實(shí)現(xiàn)了完全的面向?qū)ο?。從解放勞?dòng)力的角度講,Java實(shí)現(xiàn)了一次飛躍。開發(fā)人員再也不用被底層的系統(tǒng)機(jī)制所牽絆,將自己的更多精力放在業(yè)務(wù)邏輯本身,同時(shí),Java的各種工具支持包也很完備。這也很好的解釋了,為什么嵌入式領(lǐng)域一個(gè)項(xiàng)目的開發(fā)周期往往是2~3年,開發(fā)成員往往是幾十甚至是幾百人。而互聯(lián)網(wǎng)產(chǎn)品很多都是幾個(gè)人或一個(gè)人,一周或一個(gè)月的作品。但不可否認(rèn),Java自身的運(yùn)行機(jī)制,導(dǎo)致它對(duì)系統(tǒng)資源的高要求和運(yùn)行時(shí)的低效率,這也是Java在特有領(lǐng)域不能完全替代C++的原因。
Python
在接觸Python之前,我一直認(rèn)為Java是用起來最爽的語言(簡(jiǎn)單的運(yùn)行和開發(fā)環(huán)境搭建、功能強(qiáng)大的IDE工具、完備的工具包支持),但接觸到Python之后才發(fā)現(xiàn)我的結(jié)論下的太早了。相比于Java,Python除了是腳本語言、動(dòng)態(tài)語言這樣的基本屬性之外,Python的一個(gè)很大的特點(diǎn)是簡(jiǎn)潔。Python能夠使用更少的代碼,更少的依賴完成你想要的工作。
當(dāng)然語言和算法一樣,沒有一個(gè)算法能使用所有的場(chǎng)景,也沒有一種語言能駕馭所有的領(lǐng)域。