『壹』 PHP和Python哪個更有前途
看個人的興趣,如果喜歡做網站的話,就學php,現在好多網站都是用php編寫的,並且php是後來興起的語言,外面的Php程序員還挺缺的!!
如果喜歡做系統腳本編程的,就學python,現在好多系統都支持python編寫的腳本,python學起來也挺容易的,發展前途來蠻不錯的!
不過現在php容易找工作一點,發展勢頭比phthon高,,不過以後就不好說了!
這兩門學精了,都好有前途!
『貳』 如果V2EX在今天才開始開發,會用什麼Python Web框架
從GitHub中整理出的15個最受歡迎的Python開源框架。這些框架包括事件I/O,OLAP,Web開發,高性能網路通信,測試,爬蟲等。
Django: Python Web應用開發框架
Django 應該是最出名的Python框架,GAE甚至Erlang都有框架受它影響。Django是走大而全的方向,它最出名的是其全自動化的管理後台:只需要使用起ORM,做簡單的對象定義,它就能自動生成資料庫結構、以及全功能的管理後台。
Diesel:基於Greenlet的事件I/O框架
Diesel提供一個整潔的API來編寫網路客戶端和伺服器。支持TCP和UDP。
Flask:一個用Python編寫的輕量級Web應用框架
Flask是一個使用Python編寫的輕量級Web應用框架。基於Werkzeug WSGI工具箱和Jinja2
模板引擎。Flask也被稱為「microframework」,因為它使用簡單的核心,用extension增加其他功能。Flask沒有默認使用的數
據庫、窗體驗證工具。
Cubes:輕量級Python OLAP框架
Cubes是一個輕量級Python框架,包含OLAP、多維數據分析和瀏覽聚合數據(aggregated data)等工具。
Kartograph.py:創造矢量地圖的輕量級Python框架
Kartograph是一個Python庫,用來為ESRI生成SVG地圖。Kartograph.py目前仍處於beta階段,可以在virtualenv環境下來測試。
Pulsar:Python的事件驅動並發框架
Pulsar是一個事件驅動的並發框架,有了pulsar,可以寫出在不同進程或線程中運行一個或多個活動的非同步伺服器。
Web2py:全棧式Web框架
Web2py是一個為Python語言提供的全功能Web應用框架,旨在敏捷快速的開發Web應用,具有快速、安全以及可移植的資料庫驅動的應用,兼容Google App Engine。
Falcon:構建雲API和網路應用後端的高性能Python框架
Falcon是一個構建雲API的高性能Python框架,它鼓勵使用REST架構風格,盡可能以最少的力氣做最多的事情。
Dpark:Python版的Spark
DPark是Spark的Python克隆,是一個Python實現的分布式計算框架,可以非常方便地實現大規模數據處理和迭代計算。DPark由豆瓣實現,目前豆瓣內部的絕大多數數據分析都使用DPark完成,正日趨完善。
Buildbot:基於Python的持續集成測試框架
Buildbot是一個開源框架,可以自動化軟體構建、測試和發布等過程。每當代碼有改變,伺服器要求不同平台上的客戶端立即進行代碼構建和測試,收集並報告不同平台的構建和測試結果。
Zerorpc:基於ZeroMQ的高性能分布式RPC框架
Zerorpc是一個基於ZeroMQ和MessagePack開發的遠程過程調用協議(RPC)實現。和 Zerorpc 一起使用的 Service API 被稱為 zeroservice。Zerorpc 可以通過編程或命令行方式調用。
Bottle: 微型Python Web框架
Bottle是一個簡單高效的遵循WSGI的微型python Web框架。說微型,是因為它只有一個文件,除Python標准庫外,它不依賴於任何第三方模塊。
Tornado:非同步非阻塞IO的Python Web框架
Tornado的全稱是Torado Web Server,從名字上看就可知道它可以用作Web伺服器,但同時它也是一個Python Web的開發框架。最初是在FriendFeed公司的網站上使用,FaceBook收購了之後便開源了出來。
webpy: 輕量級的Python Web框架
webpy的設計理念力求精簡(Keep it simple and powerful),源碼很簡短,只提供一個框架所必須的東西,不依賴大量的第三方模塊,它沒有URL路由、沒有模板也沒有資料庫的訪問。
Scrapy:Python的爬蟲框架
Scrapy是一個使用Python編寫的,輕量級的,簡單輕巧,並且使用起來非常的方便。
『叄』 Python幾種主流框架比較
從GitHub中整理出的15個最受歡迎的Python開源框架。這些框架包括事件I/O,OLAP,Web開發,高性能網路通信,測試,爬蟲等。
Django: Python Web應用開發框架
Django 應該是最出名的Python框架,GAE甚至Erlang都有框架受它影響。Django是走大而全的方向,它最出名的是其全自動化的管理後台:只需要使用起ORM,做簡單的對象定義,它就能自動生成資料庫結構、以及全功能的管理後台。
Diesel:基於Greenlet的事件I/O框架
Diesel提供一個整潔的API來編寫網路客戶端和伺服器。支持TCP和UDP。
Flask:一個用Python編寫的輕量級Web應用框架
Flask是一個使用Python編寫的輕量級Web應用框架。基於Werkzeug WSGI工具箱和Jinja2
模板引擎。Flask也被稱為「microframework」,因為它使用簡單的核心,用extension增加其他功能。Flask沒有默認使用的數
據庫、窗體驗證工具。
Cubes:輕量級Python OLAP框架
Cubes是一個輕量級Python框架,包含OLAP、多維數據分析和瀏覽聚合數據(aggregated data)等工具。
Kartograph.py:創造矢量地圖的輕量級Python框架
Kartograph是一個Python庫,用來為ESRI生成SVG地圖。Kartograph.py目前仍處於beta階段,你可以在virtualenv環境下來測試。
Pulsar:Python的事件驅動並發框架
Pulsar是一個事件驅動的並發框架,有了pulsar,你可以寫出在不同進程或線程中運行一個或多個活動的非同步伺服器。
Web2py:全棧式Web框架
Web2py是一個為Python語言提供的全功能Web應用框架,旨在敏捷快速的開發Web應用,具有快速、安全以及可移植的資料庫驅動的應用,兼容Google App Engine。
Falcon:構建雲API和網路應用後端的高性能Python框架
Falcon是一個構建雲API的高性能Python框架,它鼓勵使用REST架構風格,盡可能以最少的力氣做最多的事情。
Dpark:Python版的Spark
DPark是Spark的Python克隆,是一個Python實現的分布式計算框架,可以非常方便地實現大規模數據處理和迭代計算。DPark由豆瓣實現,目前豆瓣內部的絕大多數數據分析都使用DPark完成,正日趨完善。
Buildbot:基於Python的持續集成測試框架
Buildbot是一個開源框架,可以自動化軟體構建、測試和發布等過程。每當代碼有改變,伺服器要求不同平台上的客戶端立即進行代碼構建和測試,收集並報告不同平台的構建和測試結果。
Zerorpc:基於ZeroMQ的高性能分布式RPC框架
Zerorpc是一個基於ZeroMQ和MessagePack開發的遠程過程調用協議(RPC)實現。和 Zerorpc 一起使用的 Service API 被稱為 zeroservice。Zerorpc 可以通過編程或命令行方式調用。
Bottle: 微型Python Web框架
Bottle是一個簡單高效的遵循WSGI的微型python Web框架。說微型,是因為它只有一個文件,除Python標准庫外,它不依賴於任何第三方模塊。
Tornado:非同步非阻塞IO的Python Web框架
Tornado的全稱是Torado Web Server,從名字上看就可知道它可以用作Web伺服器,但同時它也是一個Python Web的開發框架。最初是在FriendFeed公司的網站上使用,FaceBook收購了之後便開源了出來。
webpy: 輕量級的Python Web框架
webpy的設計理念力求精簡(Keep it simple and powerful),源碼很簡短,只提供一個框架所必須的東西,不依賴大量的第三方模塊,它沒有URL路由、沒有模板也沒有資料庫的訪問。
Scrapy:Python的爬蟲框架
Scrapy是一個使用Python編寫的,輕量級的,簡單輕巧,並且使用起來非常的方便。
『肆』 Python 有哪些好的 Web 框架
python的web框架很多
django (大而全,模板,orm都自帶)
flask (pocoo出品,比屬精品,自帶jinja2模板,可以替換)
web.py (這個我沒用過,作者自殺,白瞎了一個高手)
bottle (只有一個文件的框架,需要自己構建整個開發體系)
uliweb (中國人開發的,也很不錯)
Tornado (非同步框架,適合長連接,比如在線聊天之類的)
Python框架雖然說是百花齊放,但仍然有那麼一家是最大的,它就是Django。Django為人所稱道的地方主要有:
①完美的文檔,Django的成功,我覺得很大一部分原因要歸功於Django近乎完美的官方文檔(包括Django book)。
②
全套的解決方案,Django象Rails一樣,提供全套的解決方案(full-stack framework + batteries
included),基本要什麼有什麼(比如:cache、session、feed、orm、geo、auth),而且全部Django自己造,開發網
站應手的工具Django基本都給你做好了,因此開發效率是不用說的,出了問題也算好找,不在你的代碼里就在Django的源碼里。
③強大的URL路由配置,Django讓你可以設計出非常優雅的URL,在Django里你基本可以跟醜陋的GET參數說拜拜。
④自助管理後台,admin interface是Django里比較吸引眼球的一項contrib,讓你幾乎不用寫一行代碼就擁有一個完整的後台管理界面。
『伍』 web前端開發主要是做什麼的
前端開發是創建WEB頁面或APP等前端界面呈現給用戶的過程,通過HTML,CSS及JavaScript以及衍生出來的各種技術、框架、解決方案,來實現互聯網產品的用戶界面交互。
前端開發跟隨移動互聯網發展帶來了大量高性能的移動終端設備應用。HTML5,Node.js的廣泛應用,各類UI框架,JS類庫層出不窮,開發難度也在逐步提升。
前端框架
學好Web框架,熟悉掌握HTML、伺服器端腳本語言、CSS和JavaScript之後,學習Web框架可以加快Web開發速度,節約時間。PHP程序員可選的框架包括CakePHP、CodeIgniter、Zend等,Python程序員喜歡使用Django和webpy,Ruby程序員常用RoR。
『陸』 為什麼 Nginx 已經這么成熟,Python 還有各種如 web.py 等 web 框架
nginx是伺服器,web.py是web應用框架。
簡言之,前者封裝對網路io的處理,後者負責具體應用的邏輯,解決的問題是不一樣的。形象點呢,一個請求來了,nginx先把請求攔下來,發現要的是現成的東西(靜態文件),它就直接把現成的靜態文件返回給客戶端,這樣速度非常快,如果是其他的請求,再交給web.py解決,web.py解決完了之後,只是生成要返回的內容,並不自己做網路io,而是由nginx處理的。
這樣多好,一個安心處理網路、並發,順便把遇到簡單的請求直接ko掉。另一個專心處理應用的邏輯。
當然nginx能做的不只是這些,而為了開發方便web.py等框架都是內置簡單的web伺服器的。
至於tornado,它裡面既有web應用框架,也有web伺服器,而且這個伺服器用的還是高性能單線程非阻塞非同步的模型,是個例外。
『柒』 nginx 502 webpy bad gateway問題怎麼解決
Nginx 502的觸發條件
502錯誤最通常的出現情況就是後端主機當機。在upstream配置里有這么一項配置:proxy_next_upstream,這個配置指定了 nginx在從一個後端主機取數據遇到何種錯誤時會轉到下一個後端主機,里頭寫上的就是會出現502的所有情況拉,默認是error timeout。error就是當機、斷線之類的,timeout就是讀取堵塞超時,比較容易理解。我一般是全寫上的:
proxy_next_upstream error timeout invalid_header http_500 http_503;不過現在可能我要去掉http_500這一項了,http_500指定後端返回500錯誤時會轉一個主機,後端的jsp出錯的話,本來會列印一堆 stacktrace的錯誤信息,現在被502取代了。但公司的程序員可不這么認為,他們認定是nginx出現了錯誤,我實在沒空跟他們解釋502的原理 了……
503錯誤就可以保留,因為後端通常是apache resin,如果apache死機就是error,但resin死機,僅僅是503,所以還是有必要保留的。
解決辦法
遇到502問題,可以優先考慮按照以下兩個步驟去解決。
1、查看當前的PHP FastCGI進程數是否夠用:
復制代碼 代碼如下:
netstat -anpo | grep "php-cgi" | wc -l
如果實際使用的「FastCGI進程數」接近預設的「FastCGI進程數」,那麼,說明「FastCGI進程數」不夠用,需要增大。
2、部分PHP程序的執行時間超過了Nginx的等待時間,可以適當增加nginx.conf配置文件中FastCGI的timeout時間,例如:
復制代碼 代碼如下:
http { fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; ...... } ......
php.ini中memory_limit設低了會出錯,修改了php.ini的memory_limit為64M,重啟nginx,發現好了,原來是PHP的內存不足了。
如果這樣修改了還解決不了問題,可以參考下面這些方案:
一、max-children和max-requests
一台伺服器上運行著nginx php(fpm) xcache,訪問量日均 300W pv左右。
最近經常會出現這樣的情況:php頁面打開很慢,cpu使用率突然降至很低,系統負載突然升至很高,查看網卡的流量,也會發現突然降到了很低。這種情況只持續數秒鍾就恢復了。
檢查php-fpm的日誌文件發現了一些線索。
復制代碼 代碼如下:
Sep 30 08:32:23.289973 [NOTICE] fpm_unix_init_main(), line 271: getrlimit(nofile): max:51200, cur:51200 Sep 30 08:32:23.290212 [NOTICE] fpm_sockets_init_main(), line 371: using inherited socket fd=10, 「127.0.0.1:9000″ Sep 30 08:32:23.290342 [NOTICE] fpm_event_init_main(), line 109: libevent: using epoll Sep 30 08:32:23.296426 [NOTICE] fpm_init(), line 47: fpm is running, pid 30587
在這幾句的前面,是1000多行的關閉children和開啟children的日誌。
原來,php-fpm有一個參數 max_requests,該參數指明了,每個children最多處理多少個請求後便會被關閉,默認的設置是500。因為php是把請求輪詢給每個 children,在大流量下,每個childre到達max_requests所用的時間都差不多,這樣就造成所有的children基本上在同一時間 被關閉。
在這期間,nginx無法將php文件轉交給php-fpm處理,所以cpu會降至很低(不用處理php,更不用執行sql),而負載會升至很高(關閉和開啟children、nginx等待php-fpm),網卡流量也降至很低(nginx無法生成數據傳輸給客戶端)
解決問題很簡單,增加children的數量,並且將 max_requests 設置未 0 或者一個比較大的值:
打開 /usr/local/php/etc/php-fpm.conf調大以下兩個參數(根據伺服器實際情況,過大也不行)
復制代碼 代碼如下:
<value>5120</value><value>600</value>
然後重啟php-fpm。
二、增加緩沖區容量大小
將nginx的error log打開,發現「pstream sent too big header while reading response header from upstream」這樣的錯誤提示。查閱了一下資料,大意是nginx緩沖區有一個bug造成的,我們網站的頁面消耗佔用緩沖區可能過大。參考老外寫的修 改辦法增加了緩沖區容量大小設置,502問題徹底解決。後來系統管理員又對參數做了調整隻保留了2個設置參數:client head buffer,fastcgi buffer size。
三、request_terminate_timeout
如果主要是在一些post或者資料庫操作的時候出現502這種情況,而不是在靜態頁面操作中常見,那麼可以查看一下php-fpm.conf設置中的一項:
request_terminate_timeout
這個值是max_execution_time,就是fast-cgi的執行腳本時間。
0s
0s為關閉,就是無限執行下去。(當時裝的時候沒仔細看就改了一個數字)問題解決了,執行很長時間也不會出錯了。優化fastcgi中,還可以改改這個值5s 看看效果。
php-cgi進程數不夠用、php執行時間長、或者是php-cgi進程死掉,都會出現502錯誤。Nginx 502 Bad Gateway錯誤的解決辦法2
今天,我的VPS頻繁提示Nginx 502 Bad Gateway錯誤了,重啟了VPS解決之後又出現,很煩。有點想不通,前兩天網站達到了1290的訪問量都沒有出什麼問題,怎麼這次就出現了502 Bad Gateway?郁悶啊!!!在搜索了很久,終於找到了不少相關的答案,希望修改之後不會再出現這個錯誤了。唉,既然在網上找了那麼久的答案,那當然得把有用的東西記錄下,免得我下次再去谷歌~
由於我是採用了LNMP一鍵安裝包 ,出了問題肯定要先到官方論壇去搜索下了,真好,官方有個這樣的置頂帖,大家先瞧瞧。
LNMP一鍵安裝包官方的:
第一種原因:目前lnmp一鍵安裝包比較多的問題就是502 Bad Gateway,大部分情況下原因是在安裝php前,腳本中某些lib包可能沒有安裝上,造成php沒有編譯安裝成功。解決辦法:可以嘗試根據lnmp一鍵安裝包中的腳本手動安裝一下,看看是什麼錯誤導致的。
第二種原因:
在php.ini里,eaccelerator配置項一定要放在Zend Optimizer配置之前,否則也可能引起502 Bad Gateway
第三種原因:
在安裝好使用過程中出現502問題,一般是因為默認php-cgi進程是5個,可能因為phpcgi進程不夠用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 將其中的max_children值適當增加。
第四種原因:
php執行超時,修改/usr/local/php/etc/php.ini 將max_execution_time 改為300
第五種原因:
磁碟空間不足,如mysql日誌佔用大量空間
第六種原因:
查看php-cgi進程是否在運行
也有網友給出了另外的解決辦法:
Nginx 502 Bad Gateway的含義是請求的PHP-CGI已經執行,但是由於某種原因(一般是讀取資源的問題)沒有執行完畢而導致PHP-CGI進程終止,一般來說Nginx 502 Bad Gateway和php-fpm.conf的設置有關。
php-fpm.conf有兩個至關重要的參數,一個是max_children,另一個是request_terminate_timeout,但是這個值不是通用的,而是需要自己計算的。在安裝好使用過程中出現502問題,一般是因為默認php-cgi進程是5個,可能因為phpcgi進程不夠用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 將其中的max_children值適當增加。
計算的方式如下:
如果你的伺服器性能足夠好,且寬頻資源足夠充足,PHP腳本沒有系循環或BUG的話你可以直接將 request_terminate_timeout設置成0s。0s的含義是讓PHP-CGI一直執行下去而沒有時間限制。而如果你做不到這一點,也就 是說你的PHP-CGI可能出現某個BUG,或者你的寬頻不夠充足或者其他的原因導致你的PHP-CGI假死那麼就建議你給 request_terminate_timeout賦一個值,這個值可以根據伺服器的性能進行設定。一般來說性能越好你可以設置越高,20分鍾-30分 鍾都可以。而max_children這個值又是怎麼計算出來的呢?這個值原則上是越大越好,php-cgi的進程多了就會處理的很快,排隊的請求就會很少。 設置max_children也需要根據伺服器的性能進行設定,一般來說一台伺服器正常情況下每一個php-cgi所耗費的內存在20M左右。
按照官方的答案,排查了相關的可能,並結合了網友的答案,得出了下面的解決辦法。
1、查看php fastcgi的進程數(max_children值)
代碼:netstat -anpo | grep 「php-cgi」 | wc -l
5(假如顯示5)
2、查看當前進程
代碼:top觀察fastcgi進程數,假如使用的進程數等於或高於5個,說明需要增加(根據你機器實際狀況而定)
3、調整/usr/local/php/etc/php-fpm.conf 的相關設置
<value name=」max_children」>10</value><value name=」request_terminate_timeout」>60s</value>max_children最多10個進程,按照每個進程20MB內存,最多200MB。request_terminate_timeout執行的時間為60秒,也就是1分鍾。
『捌』 webpy + nginx with fastcgi方案怎麼樣
起初我很是奇怪,按理說只有當靜態文件不存在時nginx才會返回404錯誤,而現在訪問的是配置在nginx.conf中的一個動態路徑,該動態路徑請求通過fastcgi最終會映射到某個python class的GET或POST方法中,那為什麼nginx會返回404呢?
查閱相關文檔之後發現
fastcgi在遇到webpy或其他後端http模塊處理極慢的情況下,也就是說超過nginx允許的應答時間,nginx就會對此動態路徑請求做出404的應答
針對此情況,我開始著手准備一系列測試和實驗
實驗
實驗一:剝離fastcgi,單獨使用webpy,進行壓力測試
這個實驗很簡單,只需要注釋掉一行代碼,便可以以純webpy方式訪問,基於webpy的python應用main入口一般都是這樣:
?
1
2
3
4
if __name__ == "__main__":
web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func,addr)
app.add_processor(web.loadhook(session_hook))
app.run()
只需要注釋掉第二行即可,之後在終端下運行python <filename>.py,webpy會默認監聽本地的8080埠,之後無論是通過瀏覽器還是其他方式訪問相應地址即可
同時,還需要准備一份發起http請求的代碼,python用來干這活最簡單不過了
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import httplib
server = "192.168.2.2:8080"
url = "/user/[email protected]&password=111&rnd=33"
class perftest:
def __init__(self):
pass
def run(self):
conn = httplib.HTTPConnection(server)
for i in range(100):
try:
conn.request("GET", url)
rsp = conn.getresponse()
if 200 == rsp.status:
print "headers", rsp.getheaders()
content = rsp.read()
print "content", content
except Exception, ex:
print "ERR:", ex
conn.close()
跑了幾次壓力之後,webpy扛不住了…開始大面積拋異常,大致意思是python自帶的logging模塊出錯,因為有頻繁的文件打開關閉操作,某個操作導致文件句柄被非法訪問…
在查看相關的log封裝類之後發現,python的日誌模塊設計實在是有點不夠內聚,也可以說不夠徹底吧,不由得想起了之前用過的log4net,真是簡潔啊
出錯的原因在項目中開發同事封裝的log模塊多次執行了addHandler和removeHandler操作,據說在之前的開發過程中還出現過一行日誌列印多遍的情況,而且隨著程序的運行,相同的日誌會越來越多…
順手將該封裝修改為單例類之後,故障解除
處理完之後接著跑壓力,webpy還是會偶爾列印異常信息,不過已經變成了session訪問異常,還好的是出現面積很小,於是開始增加壓力測試的並發量,結果表明穩定度還是可以的,性能也在可以接受的范圍之內
實驗二:保持最終部署環境不變(nginx+fastcgi+webpy),繼續壓力測試
在上次測試解決完日誌的問題之後,我開始以真實環境做相關的測試,要注意的是使用nginx之後,需要訪問nginx.conf中配置綁定的相關埠,不再是webpy默認的8080埠
繼續做上述的壓力測試,性能也在可以接受的范圍之內
實驗三:模擬用戶環境
根據測試MM所描述的,瀏覽器在B子系統出錯過程中扮演了很關鍵的角色,於是我分別使用幾個瀏覽器和純粹的python代碼分別訪問相同的地址
幾種組合的測試發現:
瀏覽器在只訪問B子系統的情況下,一直表現正常
一旦瀏覽器訪問過A子系統之後,再次訪問B子系統即出現測試MM描述的404現象
python代碼一直訪問正常