• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            C++分析研究  
            C++
            日歷
            <2014年1月>
            2930311234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678
            統(tǒng)計(jì)
            • 隨筆 - 92
            • 文章 - 4
            • 評論 - 4
            • 引用 - 0

            導(dǎo)航

            常用鏈接

            留言簿

            隨筆檔案

            文章檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

             
              Python常見部署方法有 :

              fcgi :用spawn-fcgi或者框架自帶的工具對各個project分別生成監(jiān)聽進(jìn)程,然后和http 服務(wù)互動

              wsgi :利用http服務(wù)的mod_wsgi模塊來跑各個project(Web應(yīng)用程序或框架簡單而通用的Web服務(wù)器 之間的接口)。

              uWSGI 是一款像php-cgi一樣監(jiān)聽同一端口,進(jìn)行統(tǒng)一管理和負(fù)載平衡的工具,uWSGI,既不用wsgi協(xié)議也不用fcgi協(xié)議,而是自創(chuàng)了一個uwsgi的協(xié)議,據(jù)說該協(xié)議大約是fcgi協(xié)議的10倍那么快。

              其實(shí) WSGI 是分成 server 和 framework (即 application) 兩部分 (當(dāng)然還有 middleware)。嚴(yán)格說 WSGI 只是一個協(xié)議, 規(guī)范 server 和 framework 之間連接的接口。

              WSGI server 把服務(wù)器功能以 WSGI 接口暴露出來。比如 mod_wsgi 是一種 server, 把 apache 的功能以 WSGI 接口的形式提供出來。

              WSGI framework 就是我們經(jīng)常提到的 Django 這種框架。不過需要注意的是, 很少有單純的 WSGI framework , 基于 WSGI 的框架往往都自帶 WSGI server。比如 Django、CherryPy 都自帶 WSGI server 主要是測試用途, 發(fā)布時則使用生產(chǎn)環(huán)境的 WSGI server。而有些 WSGI 下的框架比如 pylons、bfg 等, 自己不實(shí)現(xiàn) WSGI server。使用 paste 作為 WSGI server。

              Paste 是流行的 WSGI server, 帶有很多中間件。還有 flup 也是一個提供中間件的庫。

              搞清除 WSGI server 和 application, 中間件自然就清楚了。除了 session、cache 之類的應(yīng)用, 前段時間看到一個 bfg 下的中間件專門用于給網(wǎng)站換膚的 (skin) 。中間件可以想到的用法還很多。

              這里再補(bǔ)充一下, 像 django 這樣的框架如何以 fastcgi 的方式跑在 apache 上的。這要用到 flup.fcgi 或者 fastcgi.py (eurasia 中也設(shè)計(jì)了一個 fastcgi.py 的實(shí)現(xiàn)) 這些工具, 它們就是把 fastcgi 協(xié)議轉(zhuǎn)換成 WSGI 接口 (把 fastcgi 變成一個 WSGI server) 供框架接入。整個架構(gòu)是這樣的: django -> fcgi2wsgiserver -> mod_fcgi -> apache 。

              雖然我不是 WSGI 的粉絲, 但是不可否認(rèn) WSGI 對 python web 的意義重大。有意自己設(shè)計(jì) web 框架, 又不想做 socket 層和 http 報(bào)文解析的同學(xué), 可以從 WSGI 開始設(shè)計(jì)自己的框架。在 python 圈子里有個共識, 自己隨手搞個 web 框架跟喝口水一樣自然, 非常方便。或許每個 python 玩家都會經(jīng)歷一個倒騰框架的托福改分

              uWSGI的主要特點(diǎn)如下:

              超快的性能。

              低內(nèi)存占用(實(shí)測為apache2的mod_wsgi的一半左右)。

              多app管理。

              詳盡的日志功能(可以用來分析app性能和瓶頸)。

              高度可定制(內(nèi)存大小限制,服務(wù)一定次數(shù)后重啟等)。

              uwsgi的官方文檔:

              http://projects.unbit.it/uwsgi/wiki/Doc

              nginx.conf

              location / {

              include uwsgi_params

              uwsgi_pass 127.0.0.1:9090

              }

              啟動app

              uwsgi -s :9090 -w myapp

              uwsgi的調(diào)優(yōu)參數(shù)~

              uwsgi的參數(shù)

              以上是單個project的最簡單化部署,uwsgi還是有很多令人稱贊的功能的,例如:

              并發(fā)4個線程:

              uwsgi -s :9090 -w myapp -p 4

              主控制線程+4個線程:

              uwsgi -s :9090 -w myapp -M -p 4

              執(zhí)行超過30秒的client直接放棄:

              uwsgi -s :9090 -w myapp -M -p 4 -t 30

              限制內(nèi)存空間128M:

              uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128

              服務(wù)超過10000個req自動respawn:

              uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000

              后臺運(yùn)行等:

              uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log

              為了讓多個站點(diǎn)共享一個uwsgi服務(wù),必須把uwsgi運(yùn)行成虛擬站點(diǎn):去掉“-w myapp”加上”–vhost”:

              uwsgi -s :9090 -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log --vhost

              然后必須配置virtualenv,virtualenv是Python的一個很有用的虛擬環(huán)境工具,這樣安裝:

              最后配置nginx,注意每個站點(diǎn)必須單獨(dú)占用一個server,同一server不同location定向到不同的應(yīng)用不知為何總是失敗,估計(jì)也算是一個bug。

              server {

              listen 80;

              server_name app1.mydomain.com;

              location / {

              include uwsgi_params;

              uwsgi_pass 127.0.0.1:9090;

              uwsgi_param UWSGI_PYHOME /var/www/myenv;

              uwsgi_param UWSGI_SCRIPT myapp1;

              uwsgi_param UWSGI_CHDIR /var/www/myappdir1;

              }

              }

              server {

              listen 80;

              server_name app2.mydomain.com;

              location / {

              include uwsgi_params;

              uwsgi_pass 127.0.0.1:9090;

              uwsgi_param UWSGI_PYHOME /var/www/myenv;

              uwsgi_param UWSGI_SCRIPT myapp2;

              uwsgi_param UWSGI_CHDIR /var/www/myappdir2;

              }

              }

              這樣,重啟nginx服務(wù),兩個站點(diǎn)就可以共用一個uwsgi服務(wù)了。

              再來搞下 fastcgi的方式

              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;

              }

              location /static/ {

              root /path/to/www;

              if (-f $request_filename) {

              rewrite ^/static/(.*)$ /static/$1 break;

              }

              }

              啟動一個fastcgi的進(jìn)程

              spawn-fcgi -d /path/to/www -f /path/to/www/index.py -a 127.0.0.1 -p 9002

              用web.py寫的一個小demo測試

              #!/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()

              啟動nginx

              nginx

            posted on 2014-01-02 15:50 HAOSOLA 閱讀(544) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


             
            Copyright © HAOSOLA Powered by: 博客園 模板提供:滬江博客
            PK10開獎 PK10開獎
            久久99毛片免费观看不卡 | 91精品日韩人妻无码久久不卡| 五月丁香综合激情六月久久| 一本一道久久综合狠狠老| 久久无码人妻一区二区三区午夜| 国产高潮国产高潮久久久91| 亚洲人成网站999久久久综合| 99精品国产在热久久无毒不卡 | 国产精品一区二区久久精品涩爱| 国产情侣久久久久aⅴ免费| 亚洲午夜精品久久久久久浪潮| 一本色道久久88综合日韩精品| 久久精品人人做人人爽电影 | 久久精品久久久久观看99水蜜桃| 婷婷久久久亚洲欧洲日产国码AV| 国产欧美久久一区二区| 天天做夜夜做久久做狠狠| 66精品综合久久久久久久| 青青草原综合久久大伊人导航| 人妻少妇久久中文字幕一区二区| 草草久久久无码国产专区| 亚洲色婷婷综合久久| 久久天天躁狠狠躁夜夜不卡| 国产精品热久久无码av| 久久青青草原亚洲av无码app | 亚洲午夜久久久久久久久久| 国产叼嘿久久精品久久| 777米奇久久最新地址| 亚洲综合伊人久久综合| 久久久久亚洲AV无码专区网站| 久久精品国产亚洲网站| 人妻少妇久久中文字幕| 精品熟女少妇aⅴ免费久久| 久久99国产精品成人欧美| 九九精品99久久久香蕉| 久久精品亚洲日本波多野结衣 | 亚洲精品美女久久777777| 中文字幕无码av激情不卡久久| 久久精品中文字幕有码| 伊人久久一区二区三区无码| 少妇久久久久久被弄到高潮 |