引用 @Rio 的看法:我覺(jué)得 Python 不會(huì)像 PHP 那樣流行彤钟,根本原因在于部署的難易程度来候。
PHP 從語(yǔ)言層面上講幾乎是一無(wú)是處,具體實(shí)現(xiàn)的質(zhì)量也乏善可陳逸雹,但它勝在最要命的部署上:沒(méi)有任何其他語(yǔ)言有像 PHP 一樣適合大規(guī)模部署的方式营搅。基本上裝好 Apache/mod_php 之后梆砸,PHP 應(yīng)用的部署就簡(jiǎn)化為了復(fù)制文件转质。即便是考慮到性能原因等采用 nginx/FastCGI 等替代方式,額外的工作也只是在于最初配置帖世。一旦配置完成休蟹,之后的部署都是文件復(fù)制。服務(wù)器重啟后通常會(huì)自動(dòng)啟動(dòng) apache/nginx狮暑,fastcgi manager 負(fù)責(zé)啟動(dòng) php-cgi 進(jìn)程等鸡挠,而 PHP 應(yīng)用基于文件的調(diào)用方式并不需要操心更多的維護(hù)。這對(duì)于如 Dreamhost 之類的虛擬主機(jī)平臺(tái)來(lái)說(shuō)至關(guān)重要:他們通常要一臺(tái)服務(wù)器處理成千上萬(wàn)的低流量用戶搬男,而且這些用戶沒(méi)有 root 權(quán)限去運(yùn)行其他進(jìn)程拣展。PHP 腳本的生命周期很短,沒(méi)有常駐進(jìn)程缔逛,每次調(diào)用之后就被終止备埃,對(duì)于應(yīng)用作者的要求更低姓惑,不用太多的考慮資源管理問(wèn)題。
這和 Python 之流的部署有天壤之別:大部分 Python 的網(wǎng)絡(luò)應(yīng)用如 Django, Tornado 等都需要單獨(dú)的常駐進(jìn)程(Apache/mod_python 似乎是個(gè)杯具按脚,而且早就不再更新了)于毙。這些進(jìn)程需要額外的維護(hù)工作以管理其啟動(dòng)、停止辅搬,也需要額外的監(jiān)控進(jìn)程處理意外退出后的重啟唯沮。這需要用戶對(duì)系統(tǒng)有更深入的了解。常駐進(jìn)程需要占用系統(tǒng)內(nèi)存堪遂,通常不可能在一臺(tái)服務(wù)器上運(yùn)行成百上千個(gè)應(yīng)用介蛉,對(duì)于 Dreamhost 這樣的服務(wù)提供商來(lái)說(shuō)不適合用來(lái)處理諸如 WordPress 博客之類的簡(jiǎn)單應(yīng)用。常駐進(jìn)程也要求作者對(duì)系統(tǒng)資源的管理溶褪、垃圾回收機(jī)制等有更深入的了解以避免內(nèi)存泄露币旧、資源占用過(guò)度等問(wèn)題。現(xiàn)在 Python 網(wǎng)絡(luò)應(yīng)用部署最簡(jiǎn)單的應(yīng)該是 App Engine猿妈,采用了類似 PHP 的生命周期(請(qǐng)求處理 30 秒限制吹菱,超時(shí)被終止,無(wú)法運(yùn)行常駐進(jìn)程)彭则,極大簡(jiǎn)化了管理難度鳍刷,但是國(guó)內(nèi)無(wú)法訪問(wèn)…
所以從流行程度上講,Python 不會(huì)超過(guò) PHP贰剥,因?yàn)閿?shù)量龐大的服務(wù)提供商無(wú)法用 Python 支撐現(xiàn)有的用戶規(guī)模倾剿。但是這個(gè)流行程度對(duì)于創(chuàng)業(yè)公司、專業(yè)人士來(lái)說(shuō)沒(méi)有什么意義蚌成。很多核心的網(wǎng)絡(luò)應(yīng)用不適合用 PHP 的短暫請(qǐng)求處理機(jī)制實(shí)現(xiàn)(比如準(zhǔn)實(shí)時(shí) push 提醒前痘、網(wǎng)頁(yè)即時(shí)聊天等),而更加適合由常駐進(jìn)程來(lái)處理担忧。這些才是 Python芹缔,Ruby 等語(yǔ)言實(shí)現(xiàn)發(fā)揮其能量的地方。
Python 的強(qiáng)大之處在于語(yǔ)言的簡(jiǎn)潔與優(yōu)雅瓶盛,以及它強(qiáng)大的表達(dá)能力最欠。Hacker 們?cè)敢馐褂?Python 來(lái)作為他們表達(dá)思維的方式。
在 Web 開發(fā)上面惩猫,Python部署成問(wèn)題芝硬,但是對(duì)于商業(yè)網(wǎng)站而言,自己處理一臺(tái) VPS 不成問(wèn)題轧房。而 Python的通用性拌阴,能保證完成各種非常規(guī)的應(yīng)用。
簡(jiǎn)單地說(shuō)奶镶,如果你只是需要 Web1.0 的內(nèi)容展示網(wǎng)站迟赃,考慮php陪拘。而 Web2.0,可以考慮 Python纤壁,以及RoR左刽。