不管你是待業(yè)還是失業(yè),在這個被互聯(lián)網(wǎng)圍繞的時代里,選擇python可以開發(fā)服務(wù)端嗎,就多了一項技能,還怕找不到工作?,還怕不好找工作?小編就來告訴你這個專業(yè)的優(yōu)勢到底體現(xiàn)在哪里:Python服務(wù)器編程,別在折騰開發(fā)環(huán)境了,一勞永逸的 Python 環(huán)境搭建方法,服務(wù)端開發(fā)做什么?需要具備什么能力?前景如何???。
IEEE公布的2021年編程語言排行榜,python高居首位。在百度指數(shù)上,python的搜索量也躋身到與java相等的量級,成為最火的語言之一。那么Python適合用來做服務(wù)器編程嗎?首先,看看哪些公司在用Python作為服務(wù)器的主要技術(shù)棧?可以看到,其中不缺乏一些用戶量龐大的公司。得益于語言的簡潔性,python很適合用來進行快速開發(fā),編寫出可讀性強的程序。那么怎么用python來做服務(wù)器編程呢?從一個例子說起...這是一個簡單的回顯服務(wù)器,服務(wù)端每次從請求讀取一些字節(jié)并返回給客戶端。但由于服務(wù)器是單進程的,如果一個請求占住了服務(wù)器,就沒辦法處理另一個請求。這次做一些改動,每來一個請求就fork一個進程來處理,這樣就不會出現(xiàn)之前的問題。但多進程模型處理不好會出現(xiàn)僵尸進程和孤兒進程,因此父進程需要處理SIGCHILD信號來收集退出的子進程的信息。模塊中收集子進程的例子:原始的CGI程序就是使用這種方式,對于每個請求都fork進程來解釋cgi程序。不過隨著請求數(shù)量的變多,fork進程所帶來的開銷往往很大。所以CGI不僅慢...而且甚至后來出現(xiàn)了FastCGI,它與CGI的區(qū)別,就是更Fast(誤),它是一個常駐進程,預(yù)先啟動多個cgi進程來等待處理請求。不同于FastCGI,Apache搞了一套mod_python,使得python解釋器可以嵌入在apache進程。后來PEP 333中定義了WSGI,成為沿用至今的Python web開發(fā)的標(biāo)準(zhǔn)協(xié)議。應(yīng)用WSGI協(xié)議的一個示例:絕大部分的python web開發(fā)框架都遵守了這套標(biāo)準(zhǔn):gunicorn是一個著名的wsgi http服務(wù)器,它采用pre-fork模型來處理和轉(zhuǎn)發(fā)請求。(原圖出處)gunicorn包含許多種worker模型:(原圖出處)拋開多進程,現(xiàn)在來看多線程的模型,該方案用線程代替進程來處理每一個請求:但是為什么許多人說python的多線程是個雞肋呢?看下面同樣的代碼,用同步的方式和多線程的方式執(zhí)行,多線程的代碼卻執(zhí)行的更慢...這到底是什么回事?這就要說到python中的GIL了,由于GIL的制約,多線程很難充分利用cpu的性能(原圖引用)話雖如此,多線程在IO密集型應(yīng)用上還是有不少用武之地的。下面是多線程在服務(wù)器編程的其中一些應(yīng)用(原圖引用)Actor模型生產(chǎn)者-消費者.future在PEP 3148中被定義,它提供了更簡單的多進程/多線程API在很長的一段時間,多進程/多線程的模型都應(yīng)用的很好,但是這時候更適合服務(wù)器編程的IO多路復(fù)用模型開始被廣泛應(yīng)用:基于事件驅(qū)動的異步模型對服務(wù)器的資源的有效利用率顯然易見(原圖出處)衍生了大量的異步網(wǎng)絡(luò)框架在Python 3.4后出現(xiàn)了專門處理異步IO的標(biāo)準(zhǔn)庫asyncio而在隨后的Python 3.5后出現(xiàn)了協(xié)程語法糖async/await雖然asyncio成為標(biāo)準(zhǔn)庫,但它使用方法卻較為復(fù)雜,不便于使用,也有人提議要asyncio提供更簡潔的接口,也有不少的替代庫出現(xiàn)總的來說,服務(wù)器編程經(jīng)歷了從開始的簡單到后來的復(fù)雜化最終慢慢演變到簡單的方式上。PS:部分代碼和幻燈中的圖片是從網(wǎng)上找的,原出處不明,侵刪請告知
點贊再看,養(yǎng)成習(xí)慣,微信公眾號搜索【JackCui-AI】關(guān)注這個愛發(fā)技術(shù)干貨的程序員。本文 GitHub 已收錄,有一線大廠面試完整考點、資料以及我的系列文章。網(wǎng)上教程五花八門,讀者吐槽最多的,也都是怎么搭建開發(fā)環(huán)境。對于小白來說,開發(fā)環(huán)境搭建,是必過的*關(guān)。記得自己剛學(xué) Python ,還是小白的時候,*做的一件事就是:折騰開發(fā)環(huán)境。代碼還沒寫幾行,就各種折騰,走了太多彎路,浪費了太多時間。IDE 我也折騰了個遍,Eclipse、Pycharm、Sublime Text 等等。折騰了幾周,代碼不會寫啥,*也就來個「Hello World」。作為工作時長兩年的「算法搬磚工」,今天給「未來的大牛,如今的小白」們講一下,開發(fā)環(huán)境怎么搭建。以后要是有朋友問你環(huán)境搭建問題,文章直接發(fā)給他,告訴他,這篇教程真的香!環(huán)境搭建我們都知道,Python 是一種腳本語言,有著豐富的第三方庫。Python 自帶了很多官方庫,可以直接用,例如 re、os、math 等等。但第三方庫是需要我們自己安裝的。就好比,一個正常人,一生下來,自帶了眼睛、鼻子、嘴巴等,這就是“官方庫”。你要是想買個漂亮衣服,做個漂亮發(fā)型,那得自己“安裝”,這就是“第三方庫”。Python 提供了超級多,而且強大的第三方庫。我們搭建開發(fā)環(huán)境,就是讓 Python 具備各式各樣的能力,以滿足我們的需求。第三方庫很多都是個人或者團隊,非 Python 官方開發(fā)的庫,所以難免五花八門,雜亂不堪。甚至有時候,各個版本的庫,還存在各式各樣的沖突。這個庫不兼容那個庫,各種「無厘頭」報錯層出不窮。一勞永逸,解決 or 避免這類問題的方法,就是搭建一個「健壯」的開發(fā)環(huán)境。方案:Anaconda + Jupyter Notebook。好維護,好安裝,你好我也好,大家好才是真的好。1、 就是管理第三庫的工具,同時支持“多開”。你可以用 Anaconda 創(chuàng)建多個虛擬環(huán)境。啥意思?一個虛擬環(huán)境好比一個人:培養(yǎng)小王為數(shù)學(xué)家,專門負(fù)責(zé)數(shù)學(xué)相關(guān)的事。培養(yǎng)小李為語言學(xué)家,專門負(fù)責(zé)語言相關(guān)的事。體現(xiàn)到虛擬環(huán)境上,就是這樣:我創(chuàng)建了很多虛擬環(huán)境。base 是安裝 Anaconda 自帶的一個基礎(chǔ)環(huán)境。其它都是根據(jù)自己需求,創(chuàng)建的一個個獨立環(huán)境。比如,名為 jack 的環(huán)境,是一個通用的開發(fā)環(huán)境。而名為 faceswap 的環(huán)境是我專門為換臉?biāo)惴ù罱ǖ沫h(huán)境,因為它的依賴和有些通用第三方庫包是沖突的。Anaconda 還是跨平臺的,在 Windows、MacOS、Linux 都可以安裝。2、Jupyter Notebook小白推薦 Jupyter Notebook,為啥不推薦 Pycharm 這類 IDE 呢?因為 Jupyter 安裝簡單,并且好用,可以在多種平臺運行。工作后,跑算法,往往都是在服務(wù)器上運行的。連個圖像界面都沒有的服務(wù)器,你還能用 Pycharm ?Jupyter Notebook 是一個基于網(wǎng)頁的交互式計算筆記本環(huán)境。實現(xiàn)了文字和代碼的完美結(jié)合,你甚至可以邊學(xué)習(xí)邊做筆記,文本編輯還支持 Markdown 格式,插入各種數(shù)學(xué)公式也不在話下。并且由于 Jupyter Notebook 是基于網(wǎng)頁的,你完全可以在服務(wù)器端開啟服務(wù),本地電腦打開網(wǎng)頁,運行各種服務(wù)器端的代碼。如果你是做算法、做爬蟲,剛學(xué) Python 的小白,不涉及浩大的 Python 工程的開發(fā),那么別猶豫,用 Jupyter Notebook 就對了。3、安裝Anaconda + Jupyter Notebook 的好處安利個遍。那么,怎么安裝呢?Anaconda 下載地址: 安裝完,需要手動添加環(huán)境變量。Linux 和 MacOS 在安裝過程中,會有提示是否設(shè)置環(huán)境變量。Windows 添加環(huán)境變量需要在電腦->鼠標(biāo)右鍵->屬性->高級系統(tǒng)設(shè)置->環(huán)境變量->Path中設(shè)置。D:Anaconda 為 Anaconda 的安裝目錄,將下面這兩個地址添加到 Path 中即可。D:Anaconda D:AnacondaScripts都配置好后,可以在 cmd 或 Anaconda Prompt 中使用 Anaconda 搭建環(huán)境了。輸入指令:conda create -n your_name jupyter notebook這句話的意思是創(chuàng)建一個名字為 your_name 的虛擬環(huán)境,并且這個虛擬環(huán)境額外安裝 jupyter notebook 第三方庫??梢詫?your_name 改為你自己喜歡的名字,這個名字是你的虛擬環(huán)境的名字,自己隨便取,比如jack。隨后,輸入y進行安裝:安裝好后,可以通過指令 conda info -e 查看已有環(huán)境情況。從上圖可以看到,有兩個環(huán)境,一個是 base ,自帶的基礎(chǔ)環(huán)境,另一個是我們新創(chuàng)建的名為 jack 的環(huán)境。安裝好環(huán)境后,我們可以使用指令激活 jack 環(huán)境:activate jack可以看到,我們的環(huán)境由 base 變成了 jack 。接下來,我們就可以在這個環(huán)境里,安裝自己想要的第三方庫,比如 requests。conda install requests對于 conda 搜不到的包,也可以使用 pip 安裝:python -m pip install xxx需要安裝的第三方庫安裝完畢,可使用命令直接打開 Jupyter Notebook:jupyter notebook效果如下:創(chuàng)建一個新的 notebook:輸入代碼后,按 Ctrl + Enter 快捷鍵,即可運行程序:這個 Jupyter Notebook 使用的環(huán)境就是名為 jack 的虛擬環(huán)境。想安裝 Pytorch 啥的,直接在這個虛擬環(huán)境里安裝即可,真香!總結(jié)使用 Anaconda + Jupyter Notebook 搭建環(huán)境的方案,非常適合新手。Jupyter Notebook 的功能也很強大,它絕對是你學(xué)習(xí)算法、分析數(shù)據(jù)的好幫手!喜歡這類教程的,轉(zhuǎn)發(fā)、點贊,支持的人多的話,后續(xù)會繼續(xù)出一些這些工具的使用技巧。我是 Jack Cui,我們下期見!文章持續(xù)更新,可以微信公眾號搜索【JackCui-AI】*時間閱讀,本文 GitHub 已經(jīng)收錄,有大廠面試完整考點,歡迎Star。
了解服務(wù)端開發(fā),先要弄清服務(wù)端、客戶端和前端的區(qū)別??蛻舳耍–lient)或稱為用戶端,是指與服務(wù)器相對應(yīng),收集用戶意圖、為用戶展現(xiàn)服務(wù)結(jié)果、在用戶本地服務(wù)的程序??蛻舳顺绦蚍譃g覽器和客戶端特定程序兩種,Web前端是客戶端的一種,Web前端依賴瀏覽器收集用戶意圖、為用戶展現(xiàn)服務(wù)結(jié)果、瀏覽器就是在用戶本地服務(wù)的程序。特定客戶端,如Windows PC端的網(wǎng)絡(luò)客戶端程序、Linux PC端的網(wǎng)絡(luò)客戶端程序,這類客戶端依賴客戶端應(yīng)用程序調(diào)用操作系統(tǒng)組件收集用戶意圖、為用戶展現(xiàn)服務(wù)結(jié)果、在用戶本地處理提交或返回給服務(wù)端的數(shù)據(jù)。通常所說的前端是指Web前端,PC客戶端程序如今只在極特殊的場景下才需要,一般都被Web前端替代,因為瀏覽器是通用的,大多數(shù)情況下沒有必要專門開發(fā)一套客戶端軟件。網(wǎng)絡(luò)服務(wù)的軟件分B/S(瀏覽器Browser/服務(wù)器Server)和C/S(客戶端Client/服務(wù)器Server)兩種模式?;贐/S模式的軟件又叫Web應(yīng)用。Web應(yīng)用可分為前端(在瀏覽器中執(zhí)行的部分)和后端(在服務(wù)器中執(zhí)行的部分),后端又叫服務(wù)端。服務(wù)端開發(fā),就是開發(fā)運行在服務(wù)器端的程序,為客戶端提供API接口服務(wù)。軟件客戶端和服務(wù)端的協(xié)作,分為B/S(瀏覽器/服務(wù)器)和C/S(客戶端/服務(wù)器)兩種模式,瀏覽器就是一種通用的客戶端,現(xiàn)在流行的APP就相當(dāng)于個性化的客戶端,無論B/S還是C/S都要有相應(yīng)的服務(wù)器端程序提供服務(wù)。對于絕大部分應(yīng)用,服務(wù)端的核心就是數(shù)據(jù)庫,服務(wù)器端的程序就是根據(jù)應(yīng)用需求來管理和操作服務(wù)端的數(shù)據(jù)庫,通過對數(shù)據(jù)庫的操作,返回滿足用戶需求的數(shù)據(jù)。服務(wù)端開發(fā)主要就是根據(jù)業(yè)務(wù)邏輯要求實現(xiàn)業(yè)務(wù)功能和性能要求。======================================================服務(wù)端開發(fā),需要具備什么能力呢?主要是開發(fā)語言和數(shù)據(jù)庫。通常,每種開發(fā)語言理論上是通用的,可以實現(xiàn)任何業(yè)務(wù)場景,幾乎任何一種開發(fā)語言都能作為服務(wù)端程序語言。但是,術(shù)業(yè)還是有專攻的,不同的開發(fā)語言在某個行業(yè)應(yīng)用的成熟案例多少不同、難易程度和道路曲直不同,所以選用什么語言、什么數(shù)據(jù)庫,取決于是否便于解決所面對的問題和需求。每種語言的流行度和學(xué)習(xí)成本不一樣,各自的特性也有較大差異。具體選擇哪種開發(fā)語言,業(yè)內(nèi)比較認(rèn)同的參考依據(jù)是TIOBE排行榜,TIOBE排行榜是根據(jù)互聯(lián)網(wǎng)上有經(jīng)驗的程序員、課程和第三方廠商的數(shù)量,并使用搜索引擎和第三方數(shù)據(jù)統(tǒng)計出排名,只是反映某個編程語言的熱門程度,并不能說明一門編程語言好不好,或者一門語言所編寫的代碼數(shù)量多少。TIOBE開發(fā)語言排行榜每月更新一次,依據(jù)的指數(shù)是基于世界范圍內(nèi)的資深軟件工程師和第三方供應(yīng)商提供,其結(jié)果作為當(dāng)前業(yè)內(nèi)程序開發(fā)語言的流行使用程度的有效指標(biāo)。該指數(shù)可以用來檢閱開發(fā)者的編程技能能否跟上趨勢,或是否有必要作出戰(zhàn)略改變,以及什么編程語言是應(yīng)該及時掌握的。觀察認(rèn)為,該指數(shù)反應(yīng)的雖并非當(dāng)前*或應(yīng)用最廣的語言,但對世界范圍內(nèi)開發(fā)語言的走勢仍具有重要參考意義。當(dāng)前比較流行的服務(wù)端語言有Java、Python、NodeJS、PHP、Go語言(Golang)、C語言、C++、C#等。入門學(xué)習(xí),NodeJS很不錯,因為是跟前端開發(fā)的生態(tài)是一樣的,都是用語言,最容易上手;其次是Python和Go語言,這兩個語法都很簡潔,都屬于后起之秀,但Go語言的性能要比Python高很多,Go語言的開源輪子沒有Python多;PHP很容易上手,前幾年聚集的開發(fā)者也很多,但近幾年逐漸被NodeJS所取代;Java語言流行的最久,其生態(tài)也很完善,但其語法和生態(tài)復(fù)雜、學(xué)習(xí)成本較高,開發(fā)者有可能會轉(zhuǎn)移到其它后起之秀的語言;C語言通常用于底層與硬件結(jié)合的驅(qū)動、固件以及高性能計算等軟件開發(fā),是一門經(jīng)久不衰的開發(fā)語言;C++和C#通常用于PC桌面客戶端應(yīng)用程序開發(fā),PC客戶端和服務(wù)端都能用C++和C#實現(xiàn),C++因為性能卓越與C是近親而且比C語言更面向?qū)ο?、開發(fā)效率比C語言高,一直不溫不火,而C#開發(fā)者已開始越來越少。就像沒有十全十美的人一樣,也沒有十全十美的開發(fā)語言,開發(fā)者主要根據(jù)學(xué)習(xí)成本、語言流行度、生態(tài)完善度和應(yīng)用場景去選擇學(xué)習(xí)那種開發(fā)語言??焖偃腴T,建議選擇NodeJS;進階追求開發(fā)效率和性能,建議選擇Go語言(Golang)。服務(wù)端開發(fā)除了至少要精通一門開發(fā)語言之外,常用的數(shù)據(jù)庫是必須要會用的。在當(dāng)今的互聯(lián)網(wǎng)應(yīng)用中,最常見的數(shù)據(jù)庫模型主要有兩種,即關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫。常用的關(guān)系型數(shù)據(jù)庫有Access、SQLite、MySQL、MariaDB、SQL Server、Postgre、Oracle等。常用的非關(guān)系型數(shù)據(jù)庫主要有鍵值(key-value)存儲數(shù)據(jù)庫Memcached、Redis、,列存儲(Column-oriented)數(shù)據(jù)庫Cassandra、HBase,面向文檔的(Document-Oriented)數(shù)據(jù)庫MongoDB、CouchDB,圖形數(shù)據(jù)庫Neo4J、InforGrid。一般只要掌握了Redis、MySQL和MongoDB這三種數(shù)據(jù)庫,就能滿足絕大多數(shù)應(yīng)用需求,掌握了這三種數(shù)據(jù)庫之后,學(xué)習(xí)其它數(shù)據(jù)庫也就非常容易了。======================================================服務(wù)端開發(fā)的前景如何呢?可以說是IT行業(yè)最有錢景的職業(yè)了,對,精通一到兩門開發(fā)語言+常用數(shù)據(jù)庫+熟悉業(yè)務(wù)領(lǐng)域,通常都可以月薪兩萬以上。注意,是精通,不是學(xué)了點計算機和軟件工程皮毛的就能月薪兩萬以上哦,初級的月薪只有幾千也有可能。開發(fā)者、程序員、工程師(攻城獅),一直是高薪行業(yè),互聯(lián)網(wǎng)應(yīng)用如今已經(jīng)普及,物聯(lián)網(wǎng)、云計算、大數(shù)據(jù)、虛擬現(xiàn)實、增強現(xiàn)實、人工智能、智能硬件也正在逐步深入的影響著我們的生活,而這些都是由程序員一行一行代碼實現(xiàn)的。如果說房地產(chǎn)時代,需要大量的民工建設(shè)者,如今的高科技時代,需要的是大量的開發(fā)者。而在這些開發(fā)者中,最有含金量的就是服務(wù)端開發(fā)。如果你不甘身出寒門,想要逆襲人生,從*開始就打好計算機和網(wǎng)絡(luò)基礎(chǔ),學(xué)好計算機原理、計算機網(wǎng)絡(luò)、數(shù)據(jù)結(jié)構(gòu)和算法、操作系統(tǒng)、數(shù)據(jù)庫設(shè)計這幾門專業(yè)基礎(chǔ)課,在此基礎(chǔ)上去深入鉆研一門流行的開發(fā)語言和常用數(shù)據(jù)庫,逐步把自己修煉成某種語言的開發(fā)者大牛,那你的家世要不了幾年就會由寒門變小康,由小康變中產(chǎn)。家世還不錯的,通過入行服務(wù)端開發(fā),奮斗幾年,就實現(xiàn)財務(wù)自由的也大有人在。
就拿大數(shù)據(jù)說話,優(yōu)勢一目了然,從事IT行業(yè),打開IT行業(yè)的新大門,找到適合自己的培訓(xùn)機構(gòu),進行專業(yè)和系統(tǒng)的學(xué)習(xí)。
只要一個電話
我們免費為您回電