當前位置:首頁 » 編程語言 » nginxpythonweb

nginxpythonweb

發布時間: 2022-08-07 01:06:55

1. 前端工程師怎麼充分利用nginx,更有效的進行web開發

前端工程師,也叫Web前端開發工程師。他是隨著web發展,細分出來的行業。
Web前端開發技術主要包括三個要素:HTML、CSS和JavaScript!
它要求前端開發工程師不僅要掌握基本的Web前端開發技術,網站性能優化、SEO和伺服器端的基礎知識,而且要學會運用各種工具進行輔助開發以及理論層面的知識,包括代碼的可維護性、組件的易用性、分層語義模板和瀏覽器分級支持等。
隨著近兩三年來RIA(Rich Internet Applications的縮寫,中文含義為:豐富的網際網路應用程序)的流行和普及帶來的諸如:Flash/Flex,Silverlight、XML和伺服器端語言(php、ASP.NET,JSP、python)等語言,前端開發工程師也需要掌握。
前端開發的入門門檻其實很低,與伺服器端語言先慢後快的學習曲線相比,前端開發的學習曲線是先快後慢。
HTML 甚至不是一門語言,他僅僅是簡單的標記語言!
CSS 只是無類型的樣式修飾語言。當然可以勉強算作弱類型語言。
Javascript 的基礎部分相對來說不難,入手還算快。
也正因為如此,前端開發領域有很多自學成「才」的同行,但大多數人都停留在會用的階段,因為後面的學習曲線越來越陡峭,每前進一步都很難。
Web前端技術有一些江湖氣,知識點過於瑣碎,技術價值觀的博弈也難分伯仲,即全局的系統的知識結構並未成體系,這些因素也客觀上影響了「正統「前端技術的沉澱!而且各種「奇技淫巧」被濫用,前端技術知識的傳承也過於泛泛,新人難看清時局把握主次。因此,前端技術領域,為自己覓得一個靠譜的師兄,重要性要蓋過項目、團隊、公司、甚至薪水。
另一方面,正如前面所說,前端開發是個非常新的職業,對一些規范和最佳實踐的研究都處於探索階段。
總有新的靈感和技術不時閃現出來,例如CSS sprite、負邊距布局、柵格布局等;
各種JavaScript框架層出不窮,為整個前端開發領域注入了巨大的活力;
瀏覽器大戰也越來越白熱化,跨瀏覽器兼容方案依然是五花八門。
為了滿足「高可維護性」的需要,需要更深入、更系統地去掌握前端知識,這樣才可能創建一個好的前端架構,保證代碼的質量。
隨著手持設備的迅猛發展,帶動了HTML5行業標準的快速發展。web領域的技術,大概有10年都沒有大的更新了!

2. nginx如何配置支持python

1.安裝nginx安裝過nginx這就不好從新演示了.默認你也安裝好了nginx. 2.安裝flup$:dpkg -l *flup*列印信息:Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) ||/ Name Version Description +++-===========================-===========================-====================================================================== ii python-flup 0.2126-1 Implements Python Web Server Gateway Interface (WSGI) $:apt-get install python-flup 3:配置nginx.conf.這個是按照網上配置的. server {listen 1235; server_name localhost; #charset koi8-r; #access_log /dev/null; access_log /usr/local/nginx/logs/access.log; location / { #location /htm { # root /home/utest/ms;#}root /home/utest/ms; fastcgi_pass 127.0.0.1:1234; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param QUERY_STRING $query_string; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param CONTENT_LENGTH $content_length; include fastcgi_params; fastcgi_pass_header Authorization; fastcgi_intercept_errors off;}}解釋:埠:1235--為監聽埠.埠:1234----為web伺服器運行的埠. from=olddocs

3. 如何用python搭建web項目,有資料庫操作,不用框架

標准庫里有CGIHTTPServer可以用,自己就是httpd。
如果你用別程序做httpd的話,像apache、nginx、cherokee這些有名氣的應該都能支持wsgi、cgi或者fastCGI,你都可以用。

4. linux下python和webpy怎麼搭建

基於python的web開發,這里我們使用linux為開發環境,搭建基於nginx + web.py + fastcgi
有些基本基本概念解釋下,哈哈,因為我不懂
1.wsgi為Web伺服器網關介面(Python Web Server Gateway Interface,縮寫為WSGI)是是為Python語言定義的Web伺服器和Web應用程序或框架之間的一種簡單而通用的介面。自從WSGI被開發出來以後,許多其它語言中也出現了類似介面
2.uwsgi,另一種python定義的web伺服器和web應用的介面
3.REST服務,REST(Representational State Transfer表述性狀態轉移)是一種針對網路應用的設計和開發方式,可以降低開發的復雜性,提高系統的可伸縮性。
4.CRUD是指在做計算處理時的增加(Create)、查詢(Retrieve)(重新得到數據)、更新(Update)和刪除(Delete)幾個單詞的首字母簡寫。主要被用在描述軟體系統中資料庫或者持久層的基本操作功能

以下內容主要來自
http://webpy.org/cookbook/fastcgi-nginx
需要的軟體
nginx 0.7以上版本,我使用的是nginx 0.9.2
webpy我使用的web.py-0.37
spawn-fcgi 1.6.3
flup 1.0
nginx的配置請參看官方文檔
spawn-fcgi是lighttpd的一個子項目用於多進程管理
webpy和flup安裝方式為解壓後運行python setup.py install
安裝編寫index.py

點擊(此處)折疊或打開
#!/usr/bin/env python

# -*- coding: utf-8 -*-

import web

urls = ("/.*", "hello")

app = web.application(urls, globals())

class hello:

def GET(self):

return 'Hello, world!'

if __name__ == "__main__":

web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)

app.run()
注意index.py需要使用命令chmod +x index.py加入可執行許可權
將index.py放入/data/www(我所使用的目錄你可以修改)
修改nginx.conf配置
index要加入index.py
Nginx的配置加入

點擊(此處)折疊或打開
location / {

fastcgi_param REQUEST_METHOD $request_method;

fastcgi_param QUERY_STRING $query_string;

fastcgi_param CONTENT_TYPE $content_type;

fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;

fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;

fastcgi_param REMOTE_PORT $remote_port;

fastcgi_param SERVER_ADDR $server_addr;

fastcgi_param SERVER_PORT $server_port;

fastcgi_param SERVER_NAME $server_name;

fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;

fastcgi_param PATH_INFO $fastcgi_script_name;

fastcgi_pass 127.0.0.1:9002;

}
使用Spawn-fcgi
spawn-fcgi -d /data/www -f /data/www/index.py -a 127.0.0.1 -p 9002
如果報錯為126,說明index.py沒有可執行許可權
netstat -lnp | grep 9002參考是否啟動成功
我運行的實際為
spawn-fcgi -d /data/www -f /data/www/index.py -a 127.0.0.1 -p 9002 -F 2
啟動2個進程
啟動nginx
瀏覽器輸入地址

成功結束

5. 為什麼 Nginx 已經這么成熟,Python 還有各種如 web.py 等 web 框架

nginx主要處理前端靜態文件,python的web框架是負責python腳本的內容處理,nginx主要用來代理py的生產的內容
python的各種web框架穩定性遠不如專業的web伺服器nginx

6. 想做Python Web 開發,需要掌握哪些技能

  1. Python 語言

    想使用 Python 做後台開發,第一步就是就是學習 Python 語言。首先要將學習 Python 基本語法,再學習 Python 高級用法(例如閉包,面向對象等),接著再了解各個標准庫的用法,最後熟悉下 PEP8 編碼規范。

  2. 開發框架

    大部分後台業務邏輯都會使用
    Web 框架來開發,目的是提高開發效率。常用的 Python web框架有 Django、Flask、Tornado 等。個人推薦熟練掌握
    Django,因為 Django 是一個全能型框架。另外需要了解 REST,學習如何編寫 RESTful APIs。

  3. 資料庫

    現在網站業務後端用得比較多的有三種類型的資料庫,關系型資料庫(mysql等),文檔型資料庫(mongodb等),和內存型資料庫(redis等)。因為三種資料庫各有優勢和其使用場景,所以需要了解下不同類型資料庫的使用方法和應用場景,靈活應用到後端代碼中。所以要學習如何使用、設計、優化資料庫。

  4. 前端知識

    需要了解基本的 HTML、CSS、JavaScript。通常前後端開發是分離的,了解前端知識是有幫助的。能知道自己需要將傳遞哪些內容給前端,從而提供團隊合作效率。如果對前端知識感興趣,可以了解下 Bootstrap、Vue 等。

  5. Web 伺服器

    Nginx 目前很流行,使用也是很廣泛。因為其佔用內存少,穩定性高、並發能力強。所以需要掌握 Web 應用部署以及如何使用 Nginx 實現負載均衡。

  6. Linux 操作系統

    Nginx
    通常運行在 Linux 伺服器上,所以需要學習 Linux 系統。了解一些常見的 Linux
    命令、文件與目錄管理、賬號與身份管理、程序與資源管理等。

  7. 計算機網路

    後台開發經常要跟網路打交道,所以熟悉對網路協議 TCP/IP 和 HTTP。

  8. 演算法與數據結構

    我記得讀大學時使用的教程是嚴蔚敏的《數據結構》(C語言版)。其中有一句很經典的話:『程序 = 演算法 + 數據結構』。所以需要了解常用的演算法和數據結構。

7. 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代碼一直訪問正常

8. 用python做web開發,tornado 如何部署,都是用nginx+supervisor嗎

因為Tornado是非同步的網路框架,性能夠好,可以直接放在最外層,但是為了避免阻塞問題,會開多個進程,然後使用 Nginx 做反向代理實現負載均衡。具體可以看這篇文章 Introction to Tornado 中文翻譯。
那麼這里就涉及到要開多個Tornado進程的問題,使用Supervisor來做這件事是最簡單的。Supervisor 的使用方法可以看這篇文章 Python 進程管理工具 Supervisor 使用教程
另外,如果你需要部署Django或者 Flask,則推薦 Nginx+Gunicorn+Supervisor
Nginx放在最外層,然後使用Supervisor做進程管理,使用Gunicorn啟動Django或者Flask,相較於uwsgi 的方法,簡單很多,而且Gunicorn可以讓你使用Gevent和Tornado來為你的後端實現非同步訪問,性能直接飆升。

9. 如何在 virtualenv 環境下搭建 Python Web

由於字數的限制,其實本篇文章的全標題為 《如何在 virtualenv 環境下 Django + Nginx + Gunicorn+ Supervisor 搭建 Python Web》
在這篇文章里,我們將搭建一個簡單的 Web 應用,在虛擬環境中基於 Flask 框架,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理進程,然後使用 OneAPM Python 探針來監測應用性能,形成一個「閉環」 !希望能對大家有所幫助,首先簡單來介紹一下環境:
系統環境:ubuntu 14.04 Python 2.7.6
安裝組件庫
第一步安裝所需要的存儲庫,因為打算用到虛擬環境,用到 pip 安裝和管理 Python 組件,所以先更新本地包,然後安裝組件:
sudo apt-get updatesudo apt-get install python-pip python-dev nginx

創建虛擬環境 virtualenv
在一個系統中創建不同的 Python 隔離環境,相互之間還不會影響,為了使系統保持干凈,遂決定用 virtualenv 跑應用程序,創建一個容易識別的目錄,開始安裝,再創建項目目錄 super,然後激活環境:
sudo pip install virtualenv
mkdir ~/supervisor && cd ~/supervisor
virtualenv supersource super/bin/activate

安裝 Flask 框架
好了,現在在虛擬環境裡面,開始安裝 Flask 框架,flask 依賴兩個庫 werkzeug 和 jinjia2, 採用 pip 方式安裝即可, pip 是一個重要的工具,Python 用它來管理包:
pip install flask

先用 Flask 寫一個簡單的 Web 服務 myweb.py ,因為後面要做一些測試,所以設置了幾個請求:
from flask import Flask
app = Flask(__name__)
@app.route('/')def index(): return 'hello world supervisor gunicorn '@app.route('/1')def index1(): return 'hello world supervisor gunicorn ffffff'@app.route('/qw/1')def indexqw(): return 'hello world supervisor gunicorn fdfdfbdfbfb 'if __name__ == '__main__':
app.debug = True
app.run()

啟動 Flask 看看!
python myweb.py

在瀏覽器中訪問 http://127.0.0.1:5000 就可以看到了「幾個路徑都試一試」
用 Gunicorn 部署 Python Web
現在我們使用 Flask 自帶的伺服器,完成了 Web 服務的啟動。生產環境下,Flask 自帶的伺服器,無法滿足性能要求。所以我們這里採用 Gunicorn 做 wsgi 容器,用來部署 Python,首先還是安裝 Gunicorn:
pip install gunicorn

當我們安裝好 Gunicorn 之後,需要用 Gunicorn 啟動 Flask,Flask 用自帶的伺服器啟動時,Flask 裡面的 name 裡面的代碼啟動了 app.run()。而這里我們使用 Gunicorn,myweb.py 就等同於一個庫文件,被 Gunicorn 調用,這樣啟動:
gunicorn -w 4 -b 0.0.0.0:8000 myweb:app

其中 myweb 就是指 myweb.py,app 就是那個 wsgifunc 的名字,這樣運行監聽 8000 埠,原先的 5000 埠並沒有啟用,-w 表示開啟多少個 worker,-b 表示 Gunicorn 開發的訪問地址。
想要結束 Gunicorn 只需執行 pkill Gunicorn,但有時候還要 ps 找到 pid 進程號才能 kill。可是這對於一個開發來說,太過於繁瑣,因此出現了另外一個神器 ---supervisor,一個專門用來管理進程的工具,還可以管理系統的工具進程。
安裝 Supervisor
pip install supervisor
echo_supervisord_conf > supervisor.conf # 生成 supervisor 默認配置文件gedit supervisor.conf # 修改 supervisor 配置文件,添加 gunicorn 進程管理在 supervisor.conf 底部下添加 myweb.py 的配置 `/home/wang/supervisor/super` 是我的項目目錄」

[program:myweb]
command=/home/wang/supervisor/super/bin/gunicorn -w 4 -b 0.0.0.0:8000 myweb:app
directory=/home/wang/supervisor
startsecs=0 stopwaitsecs=0 autostart=false
autorestart=false
user=wang
stdout_logfile=/home/wang/supervisor/log/gunicorn.log
stderr_logfile=/home/wang/supervisor/log/gunicorn.err

supervisor 的基本使用命令:
supervisord -c supervisor.conf supervisorctl -c supervisor.conf status 查看supervisor的狀態
supervisorctl -c supervisor.conf reload 重新載入 配置文件
supervisorctl -c supervisor.conf start [all]|[appname] 啟動指定/所有 supervisor 管理的程序進程
supervisorctl -c supervisor.conf stop [all]|[appname] 關閉指定/所有 supervisor 管理的程序進程

supervisor 還有一個 web 的管理界面,可以激活。更改下配置:
[inet_http_server] ; inet (TCP) server disabled by defaultport=127.0.0.1:9001 ; (ip_address:port specifier, *:port for alliface)
username=wang ; (default is no username (open server)
password=123 ; (default is no password (open server))

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socketserverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socketusername=wang ; should be same as http_username if setpassword=123 ; should be same as http_password if set;prompt=mysupervisor ; cmd line prompt (default "supervisor");history_file=~/.sc_history ; use readline history if available

現在可以使用 supervsior 啟動 gunicorn 啦。運行命令:
supervisord -c supervisor.conf

瀏覽器訪問 http://127.0.0.1:9001 可以得到 supervisor 的 web 管理界面,訪問 http://127.0.0.1:8000 可以看見 gunicorn 啟動的返回的頁面。
配置 Nginx
前面我們已經在系統環境下安裝了 Nginx, 安裝好的 Nginx 二進制文件放在 /usr/sbin/ 文件夾下,接下來使用 Supervisor 來管理 Nginx。這里需要注意一個問題,許可權問題。Nginx 是 sudo 的方式安裝,啟動的適合也是 root 用戶,那麼我們現在也需要用 root 用戶啟動 supervisor。在 supervisor.conf 下添加配置文件:
[program:nginx]command=/usr/sbin/nginxstartsecs=0stopwaitsecs=0autostart=falseautorestart=falsestdout_logfile=/home/wang/supervisor/log/nginx.logstderr_logfile=/home/wang/supervisor/log/nginx.err

好了,都配置完之後,啟動 supervisor:
supervisord -c supervisor.conf

訪問頁面,也可以用 ab 進行壓力測試:
ab -c 100 -n 100 http://127.0.0.1:8000/qw/1

-c 用於指定壓力測試的並發數, -n 用於指定壓力測試總共的執行次數。
安裝 Python 探針
搭建好了 web,想實時監控應用數據,有什麼好的工具,用 OneAPM 的 Python 探針試試,
首先也是安裝 Python 探針:
pip install -i http://pypi.oneapm.com/simple --upgrade blueware

根據 License Key 生成配置文件:
blueware-admin generate-config (License Key) = blueware.ini

由於是在虛擬環境下,所以要特別注意路徑,修改 supervisor.conf 裡面兩項:
[program:myapp]
command = /home/wang/supervisor/super/bin/blueware-admin run-program /home/wang/supervisor/super/bin/gunicorn -w 4 -b 0.0.0.0:8000 myapp:app
environment = BLUEWARE_CONFIG_FILE=blueware.ini

重啟應用
supervisorctl # 進入命令行supervisor> reload # 重新載入

向上面一樣訪問頁面,也可以用 ab 進行壓力測試
幾分鍾後有下圖,可以看到頁面載入時間,web 事物,頁面吞吐量,其中後面是設置自定義事物「Business Transaction」。

參考文章

10. 如何部署python web程序

Python Web 程序的部署方案
綜合而言, 高性能的Python web站點部署方式首推 nginx + uwsgi
apache + mod_wsgi 是簡單穩定但性能一般的方式
API伺服器 可以直接使用tornado或者gevent
mod_python
非常原始的cgi模式部署python已經沒有什麼好介紹了。對於不太追求性能的管理系統和網站來說,使用 Apache 部署是一個不錯的選擇。較早的時候,使用 mode_python 部署python的web應用十分流行,在Django 0.96 的時候官方文檔甚至推薦這種方式。
它將Python解釋器嵌入到Apache server,以提供一個訪問Apache server內部的介面。mod_python 在現在看來性能是不佳的,每一個http請求 mod_python 都會由一個進程初始化python解釋器、載入代碼、執行、然後銷毀進程。
mod_wsgi
如果非要用Apache來部署python應用,mod_wsgi是一個更好的選擇。WSGI 全稱是 Web Server Gateway Interface ,由 PEP-333 定義。 基本上所有的python web框架都實現了wsgi介面,用mod_wsgi 能部署任何實現了wsgi的框架。實際上,不需要任何框架也可以用mod_wsgi 部署python程序。使用mod_wsgi的daemon模式,python程序會常駐內存,不會有很大的初始化和銷毀進程方面的開銷,所以性能是好於mod_python的。綜合來說,使用Apache部署python web程序,推薦使用mod_wsgi的daemon模式。
Fastcgi
先說觀點:不建議用fastcgi的方式部署Python web。
前幾年由於lighttpd風頭正勁和豆瓣的成功案例,fastcgi是一種很流行的部署方式。fastcgi與具體語言無關,也與web伺服器無關。是一種通用的部署方式。fastcgi是對於cgi的增強,CGI程序運行在獨立的進程中,並對每個Web請求建立一個進程。面對大量請求,進程的大量建立和消亡使操作系統性能大大下降。
與為每個請求創建一個新的進程不同,FastCGI使用持續的進程來處理一連串的請求。這些進程由FastCGI伺服器管理,而不是web伺服器。 當進來一個請求時,web伺服器把環境變數和這個頁面請求通過一個socket比如FastCGI進程與web伺服器都位於本地)或者一個TCP connection(FastCGI進程在遠端的server farm)傳遞給FastCGI進程。
主流的web伺服器,Apache,lighttpd,nginx 都支持fastcgi,在幾年前,lighttpd的mod_fcgi模塊性能強勁,lighttpd+fastcgi十分流行。無論是python,ruby還是php,都有大量的站點使用這種方式部署。由於nginx的崛起,現在很少有人使用lighttpd了。
fastcgi 並不是專門為python設計,並不是所有的python框架天然的支持fastcgi,通常需要flup這樣的容器來配適。flup由python編寫,和專門的c實現的wsgi容器比起來性能顯得相當不堪。fastcgi的穩定性對於新興的wsgi容器來說也有差距。無論從哪個方面來看,部署python web程序,fastcgi 都已經是過去式。
uwsgi
前幾年nginx還未內置uwsgi模塊的時候,部署uwsgi還是一件挺麻煩的事情。隨著能夠在nginx中直接使用uwsgi模塊,uwsgi已經是最可靠,最方便的高性能python web程序的部署方式了。
在1U的四核XEON伺服器上,一個簡單的wsgi handler甚至能用AB壓到8000以上的qps,這已經是完爆tornado,接近gevent的性能了。 同時,uwsgi的穩定性極好。之前我們有個每天500w-1000w動態請求的站點使用uwsgi部署非常穩定,在一個渣HP 1U 伺服器上,基本不用管它。
上面提到的部署方式都是相對於web網站的方式,在移動互聯網的時代,我們需要的是高性能的API服務,上面這些都是過時的東西。
tornado
tornado 號稱高性能,如果拿他寫網站,其實一般般,只不過跟uwsgi加一些簡單框架差不多而已。它真正的作用,是用來寫API伺服器和長連接的伺服器。
由於tornado能夠直接處理http請求,很多人直接拿他來裸奔直接提供服務。這種方式是不可取的,單線程的tornado只能利用cpu的一個核心,並且一旦阻塞直接就廢了。通常情況下,由supervisor啟動多個tornado進程,通過nginx進行反向代理負載均衡。nginx 1.14 以後的版本反向代理支持長連接,配合tornado的comet效果很好。
tornado還有一些比較奇葩的用法,比如用來做wsgi容器之類的。
gevent
gevent是一個神器,能做的事情很多。在web方面,處理http請求,用起來其實跟tornado差不多,但是要簡陋很多,cookie之類的都沒有。用gevent寫的一些API服務,部署方式還是類似tornado,用supervisor管理多個守護進程,通過nginx做負載均衡。 同樣的它的奇葩用法也和tornado一樣,可以當wsgi容器用。

熱點內容
怎麼緩存小品 發布:2024-04-19 09:49:02 瀏覽:410
在系統編程 發布:2024-04-19 08:54:55 瀏覽:235
visualstudio反編譯 發布:2024-04-19 08:44:46 瀏覽:320
ise怎麼配置晶元 發布:2024-04-19 08:27:31 瀏覽:997
免費搭建在線查詢伺服器 發布:2024-04-19 08:17:28 瀏覽:46
vs資料庫實例 發布:2024-04-19 08:14:54 瀏覽:295
vfp9反編譯 發布:2024-04-19 08:11:31 瀏覽:381
火車軟卧無線密碼是多少 發布:2024-04-19 07:38:59 瀏覽:423
vb系統文件夾 發布:2024-04-19 07:29:58 瀏覽:740
qt怎麼添加文件夾 發布:2024-04-19 07:22:53 瀏覽:256