最近模型部署用flask給接口,模型實驗室的部署流程中需用gunicorn來部署flask服務。為什么要用gunicorn呢,簡單點就是為了並發。
1、模塊安裝
pip install flask
pip install gunicorn
2、用flask寫一個簡單的web服務
# main.py
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'hello world' def main(): app.run(debug=True) if __name__ == '__main__': main()
3、啟動
我們知道直接運行main.py函數就可以啟動flask服務,但是我們這里要用gunicorn,也很簡單
gunicorn main:app
- main是flask的啟動python文件,我們這是main.py,
- app則是flask應用程序實例,我們mian.py里實例名為app
這樣運行的話, gunicorn 默認作為一個監聽 127.0.0.1:8000 的web server,可以在本機通過: http://127.0.0.1:8000 訪問。

如果要通過網絡訪問,則需要綁定不同的地址(也可以同時設置監聽端口),設置0.0.0.0可以監聽到所有ip的請求:
gunicorn -b 0.0.0.0:8080 main:app
在多核服務器上,為了支持更多的並發訪問並充分利用資源,可以使用更多的 gunicorn 進程:
gunicorn -w 4 -b 0.0.0.0:8080 main:app
- -b 表示 gunicorn 開發的訪問地址
- -w 表示工作進程數
4、配置文件
通過gunicorn -h
可以看到gunicorn有非常多的配置項,因此通常會寫成一個配置文件來進行配置。
比如我這邊寫成gunicorn.conf文件
# gunicorn.conf bind = "0.0.0.0:5000" workers = 4 backlog = 2048 pidfile = "log/gunicorn.pid" accesslog = "log/access.log" errorlog = "log/debug.log" timeout = 600 debug=False capture_output = True
debug=False: 生產環境不用這個配置項,但調試的時候debug=True還是挺好用的。而且,開啟debug項后,在啟動gunicorn的時候可以看到所有可配置項的配置
注意上面log項,如果需要將這些log文件統一放到log文件夾下,事先要先建好,不然運行時會報錯。
運行代碼為:
gunicorn --config gunicorn.conf main:app