1.http 和 http-socket的使用上有一些區別:前端
http: 本身會產生一個http進程(能夠認爲與nginx同一層)負責路由http請求給worker, http進程和worker之間使用的是uwsgi協議
http-socket: 不會產生http進程, 通常用於在前端webserver不支持uwsgi而僅支持http時使用, 他產生的worker使用的是http協議
所以, http 通常是做爲獨立部署的選項; http-socket 在前端webserver不支持uwsgi時使用,
若是前端webserver支持uwsgi, 則直接使用socket便可(tcp or unix)python
2.uwsgi 一些命令解釋linux
http://www.javashuo.com/article/p-fkunvhzk-kg.htmlnginx
圖一是socket方式,如今大部分web服務器(如nginx)支持uwsgi, 這是這三種方式最高效的一種形式,socket通訊速度會比http快 圖二是http-socket方式,這個適用於web服務器不支持uwsgi時。 後面2個圖都是http方式,使用http啓動uwsgi,系統會額外啓動一個http進程,從級別上來講,它和nginx是同一級別的,因此客戶端和uwsgi通訊,徹底能夠繞過nginx,不須要額外進行一個轉發(如圖三同樣),但很顯然,這是並非一個很明智但選擇,這樣會失去了nginx不少優秀的功能。 官方推薦的方式爲socket以及http-socket方式,顯然使用http方式會額外產生一個http進程,若是還經過nginx轉發,那麼效率上來講是相對比較低的。 2、processes/workers. 表示開啓多進程,根據你的應有開啓合適的進程數,在一些參考資料上,可能會看到processes = 2 * cpucores或者workers = 2 * cpucores,若是應有比較簡單,這樣設置通常能夠。若是想更合理,官方提供了uwsgitop去得到一個較爲合理的值。 3、threads & enable-threads python中存在GIL,實際上不存在真正意義上的多線程,可是否須要,這個就根據各自但需求設定了。結合processes: processes=2 threads=4 表示2個進程,每一個進程中有4個線程。 因爲GIL的存在,uwsgi索性默認不支持多線程,不對GIL進行初始化。但若是但願程序中的線程發揮做用,須要加入enable-threads=True; 但若是已經在多線程模式(使用 threads 選項)下,那麼uWSGI將會自動啓用線程支持。 4、uid & gid & chmod-socket uwsgi不建議使用root權限去啓動uwsgi實例。能夠經過root用戶去運行uwsgi文件,當經過uid和gid去修改用戶(移除root權限)。而且,若是你使用的是socket的通訊方式,最好加上chmod-socket字段,在linux下,socket的啓動方式,套接字相似文件,你必須保證有權限去讀取它。 chmod-socket=660 uid=1000 gid=1000 5、master 意味着啓動一個master主進程來管理其餘進程,建議啓動這個進程,在管理的時候比較方便;若是kill這個master進程,至關於關閉全部的uwsgi進程。 6、其餘 chdir: 工程目錄(啓動文件所在位置)。 module: 應有程序文件(這個字段與wsgi-file類似?) callable:flask應用實例的名稱,是flask獨有的配置項(django不須要)。因爲flask存在特殊的機制,能夠實例化多個application,須要明確指出,收到請求時,uwsgi應該調用哪一個應用實例。 buffer-size: 設置用於uwsgi包解析的內部緩存區大小,默認是4k。若是你容許接受較大數據的報頭,這個值能夠設置到64k,若是出現報頭過大的錯誤,能夠經過設置這個值解決。 daemonize: 日誌輸出文件。 disable-logging: 不記錄正常的請求日誌,只記錄錯誤日誌。 7、lazy-app 這個字段有着特殊的做用,目前還在測試與使用,接下來再把發現的問題更新進來。 下面是是我flask項目的完整uwsgi文件: socket=127.0.0.1:9088 #http-socket=127.0.0.1:8888 #http=127.0.0.1:8888 processes=2 threads=4 enable-threads=true lazy-apps=true uid=1000 gid=1000 chmod-socket=660 master=true chdir=/data/myapp/ module=manage callable=app buffer-size=65536 daemonize=/data/log/uwsgi/app.log ———————————————— 版權聲明:本文爲CSDN博主「_氣呀呀呀」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處連接及本聲明。 原文連接:https://blog.csdn.net/l_vip/article/details/81487608