一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

用gunicorn和gevent提高python web框架的性能 | 峰云就她了

 昵稱54185769 2018-06-11

這兩天在準備ppt,里面有涉及到WSGI的應該用,以前自己在51cto寫過關(guān)于gunicorn的文章,所以就轉(zhuǎn)了過來。那么不扯淡了。

其實比如 Flask,webpy,Django、CherryPy 都帶著 WSGI server 。當然性能都不好,自帶的web server 更多的是測試用途, 線上發(fā)布時,則使用高性能的 wsgi server或者是聯(lián)合nginx做uwsgi 。

原文地址 , blog.

誠如那個WSGI的定義所說的,協(xié)議定義了一套接口來實現(xiàn)服務器端與應用端通信的規(guī)范化(或者說是統(tǒng)一化)。這是怎樣的一套接口呢?很簡單,尤其是對于應用端。

神器 Gunicorn是一個Python WSGI UNIX的HTTP服務器。這是一個預先叉工人模式,從Ruby的獨角獸(Unicorn)項目移植。該Gunicorn服務器與各種Web框架兼容,我們只要簡單配置執(zhí)行,輕量級的資源消耗,以及相當迅速。它的特點是與各個web結(jié)合緊密,部署特別方便。 

那么首先安裝 gunicorn  ~

1
pip install gunicorn

這里我們說下 gunicorn 的用法,最簡單的運行方式就是:

1
gunicorn code:application

其中code就是指code.py,application就是那個wsgifunc的名字。

這樣運行的話, gunicorn 默認作為一個監(jiān)聽 127.0.0.1:8000 的web server,可以在本機通過: http://127.0.0.1:8000 訪問。

如果要通過網(wǎng)絡訪問,則需要綁定不同的地址(也可以同時設置監(jiān)聽端口):

1
gunicorn -b 10.2.20.66:8080 code:application

在多核服務器上,為了支持更多的并發(fā)訪問并充分利用資源,可以使用更多的 gunicorn 進程:

1
gunicorn -w 8 code:application

這樣就可以啟動8個進程同時處理HTTP請求,提高系統(tǒng)的使用效率及性能。

另外, gunicorn 默認使用同步阻塞的網(wǎng)絡模型(-k sync),對于大并發(fā)的訪問可能表現(xiàn)不夠好, 它還支持其它更好的模式,比如:gevent或meinheld。

#  gevent

gunicorn -k gevent code:application

#  meinheld

gunicorn -k egg:meinheld#gunicorn_worker code:application

當然,要使用這兩個東西需要另外安裝,具體請參考各自的文檔。

以上設置還可以通過 -c 參數(shù)傳入一個配置文件實現(xiàn)。

gunicorn 的配置文件

1
2
3
4
5
6
7
8
9
10
11
[root@66 tmp]# cat gun.conf
import os
bind = '127.0.0.1:5000'
workers = 4
backlog = 2048
worker_class = "sync"
debug = True
proc_name = 'gunicorn.proc'
pidfile = '/tmp/gunicorn.pid'
logfile = '/var/log/gunicorn/debug.log'
loglevel = 'debug'

這里使用FLask簡單寫了一個web例子

1
2
3
4
5
6
7
8
9
10
11
12
[root@66 tmp]# cat xiaorui.py
from flask import Flask
from flask import render_template_string
import os
from werkzeug.contrib.fixers import ProxyFix
app = Flask(__name__)
@app.route('/')
def index():
    return "worked!"
app.wsgi_app = ProxyFix(app.wsgi_app)
if __name__ == '__main__':
    app.run()

單實例測試下,首先先用單純的flask 自帶的web服務器做下測試,會看到壓力大的時候出現(xiàn)socket的問題,因為他是單進程單線程的 


那接著,咱們使用gunicorn來啟動。 

用flask做測試的時候,2000個連接用了將近6秒左右,這次用gunicorn達到了2.4秒左右。。。。。 這速度對比,已經(jīng)很明了了~
要是還想提高速度,可以改gun.conf配置文件中的worker數(shù)目。
cpu的損耗是平均到各個進程。數(shù)目一定不要過多,畢竟多進程對于系統(tǒng)的調(diào)度消耗比較大。 


event wsgi的配置,我先簡單的做下配置。。。。

大家想看實例的話,可以去gevent的官網(wǎng)的wsgi的demo   那邊還附有編程的接口。。。

1
2
3
4
from gevent.wsgi import WSGIServer
from a import app
http_server = WSGIServer(('', 11111), app)
http_server.serve_forever()

另外提一下,uwsgi現(xiàn)在也支持gevent的方式。



上面是gunicorn常用的架構(gòu),前端Nginx負載,幾個核就跑幾個Gunicorn進程,gunicorn相對后面的app又可以給出幾個進程。

比起uWSGI來說,Gunicorn對于“協(xié)程”也就是Gevent的支持會更好更完美。
方便以后業(yè)務的擴展和運營精細化。性能上Gunicorn+Gevent不會比uWSGI弱多少,畢竟后者純C能只有這么點性能也不容易,比起WSGI Server里面最強的Bjoern而言,Gunicorn也有對應的Meinheld這種利器,況且后者對于HTTP協(xié)議的支持比Bjoern更完善。Gevent雖然不是異步框架里面性能最好的,但是絕對是最完善的,社區(qū)活躍度也非常高,加上方便的monkey_patch,使得大多數(shù)應用不用改代碼就能方便地平移過來。這2者結(jié)合可以就保證了穩(wěn)定性,又能有較好性能的組合。



    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    九九九热视频免费观看| 夫妻性生活动态图视频| 香蕉网尹人综合在线观看| 亚洲五月婷婷中文字幕| 亚洲中文字幕视频在线观看| 青青操日老女人的穴穴| 国产又粗又猛又长又大| 日韩人妻av中文字幕| 一区二区三区四区亚洲专区| 开心五月激情综合婷婷色| 中日韩美一级特黄大片| 两性色午夜天堂免费视频| 日本熟女中文字幕一区| 欧美乱码精品一区二区三| 国产精品人妻熟女毛片av久| 国产精品国产亚洲看不卡| 亚洲一区二区福利在线| 午夜福利视频日本一区| 日本熟妇熟女久久综合| 老司机精品一区二区三区| 亚洲综合伊人五月天中文| 亚洲精品福利入口在线| 日本一区二区三区黄色| 91亚洲人人在字幕国产| 国产日韩精品激情在线观看| 日韩中文字幕欧美亚洲| 狠狠亚洲丁香综合久久| 91久久精品在这里色伊人| 国产黄色高清内射熟女视频| 91欧美一区二区三区成人| 婷婷色网视频在线播放| 又色又爽又无遮挡的视频| 久久女同精品一区二区| 国产午夜在线精品视频| 亚洲国产成人一区二区在线观看| 成年午夜在线免费视频| 欧美午夜视频免费观看| 亚洲日本中文字幕视频在线观看 | 黑鬼糟蹋少妇资源在线观看| 亚洲品质一区二区三区| 欧美日韩国产自拍亚洲|