Python的gunicorn服務(wù)器配置方式
Gunicorn 指南
什么是 Gunicorn?
Gunicorn(Green Unicorn)是一個(gè)兼容 WSGI 協(xié)議的 Python Web 服務(wù)器,廣泛用于部署如 Flask、Django 等 Python Web 框架。
其核心功能包括:
- 啟動(dòng) Web 服務(wù)
- 管理多個(gè)工作進(jìn)程
- 解決 Python 原生并發(fā)性能不足問(wèn)題
- 常與 Nginx 組合部署,形成 Nginx + Gunicorn 的架構(gòu)
安裝 Gunicorn
pip install gunicorn gunicorn -h # 查看幫助
使用 Gunicorn 啟動(dòng) Flask 應(yīng)用
1. 創(chuàng)建一個(gè)最基本的 Flask 應(yīng)用
# app.py
from flask import Flask
def create_app():
app = Flask(__name__)
return app
app = create_app()
@app.route('/')
def index():
return 'hello world!'
if __name__ == '__main__':
app.run()
2. 使用 Gunicorn 啟動(dòng)服務(wù)
在項(xiàng)目根目錄下運(yùn)行:
gunicorn -w 4 -b 0.0.0.0:8000 app:app
說(shuō)明:
- 第一個(gè)
app是文件名app.py - 第二個(gè)
app是 Flask 實(shí)例名app
Gunicorn 常用參數(shù)詳解
| 參數(shù) | 說(shuō)明 |
|---|---|
| -c CONFIG | 使用配置文件(適合生產(chǎn)環(huán)境) |
| -b ADDRESS | 綁定的地址與端口,例如 0.0.0.0:8000 |
| -w, --workers | 工作進(jìn)程數(shù),正整數(shù),默認(rèn) 1 |
| -k, --worker-class | 工作模式,如 sync(默認(rèn))、gevent、eventlet |
| --threads | 每個(gè) worker 的線程數(shù),默認(rèn) 1 |
| --worker-connections | 最大客戶端并發(fā)數(shù),默認(rèn) 1000 |
| --backlog | 待處理連接隊(duì)列最大長(zhǎng)度,默認(rèn) 2048 |
| -p, --pid | 設(shè)置 PID 文件路徑 |
| --access-logfile | 訪問(wèn)日志路徑 |
| --access-logformat | 日志格式 |
| --error-logfile / --log-file | 錯(cuò)誤日志路徑 |
| --log-level | 日志等級(jí),默認(rèn) info,可設(shè)為 debug/warning/error |
| --limit-request-line | 請(qǐng)求行最大長(zhǎng)度(默認(rèn) 4094) |
| --limit-request-fields | 請(qǐng)求頭最大字段數(shù)(默認(rèn) 100) |
| --limit-request-field-size | 請(qǐng)求頭字段最大字節(jié)數(shù)(默認(rèn) 8190) |
| -t, --timeout | 請(qǐng)求超時(shí)時(shí)間,單位秒,默認(rèn) 30 秒 |
| --daemon | 是否以守護(hù)進(jìn)程運(yùn)行,默認(rèn) False |
| --chdir | 切換工作目錄 |
| --graceful-timeout | 優(yōu)雅退出時(shí)間,默認(rèn) 30 秒 |
| --keep-alive | Keep-alive 連接等待時(shí)間,默認(rèn) 2 秒 |
| --reload | 開發(fā)模式:代碼變更時(shí)自動(dòng)重載 |
| --spew | 打印服務(wù)器執(zhí)行的所有語(yǔ)句 |
| --check-config | 顯示當(dāng)前配置 |
| -e, --env | 設(shè)置環(huán)境變量 |
使用配置文件啟動(dòng) Gunicorn
- 示例配置文件:gunicorn.conf.py
# 并行工作進(jìn)程數(shù) workers = 4 # 每個(gè)工作進(jìn)程線程數(shù) threads = 2 # 監(jiān)聽內(nèi)網(wǎng)端口 bind = '127.0.0.1:5000' # 是否以守護(hù)進(jìn)程運(yùn)行 daemon = 'false' # 工作模式 worker_class = 'gevent' # 最大并發(fā)連接數(shù) worker_connections = 2000 # PID 文件路徑 pidfile = '/var/run/gunicorn.pid' # 日志路徑 accesslog = '/var/log/gunicorn_access.log' errorlog = '/var/log/gunicorn_error.log' # 日志級(jí)別 loglevel = 'warning'
- 啟動(dòng)命令
gunicorn -c gunicorn.conf.py app:app
注意事項(xiàng)
Gunicorn 不支持 Windows 平臺(tái)
- 在 Windows 下運(yùn)行可能出現(xiàn)以下錯(cuò)誤:
ImportError: No module named _curses / fcntl
解決方法:
- 嘗試自行下載缺失模塊(如
fcntl.py) - 推薦在 Linux、WSL 或 Docker 環(huán)境中部署
推薦部署組合
生產(chǎn)環(huán)境中推薦以下組合:
Nginx + Gunicorn + Flask/Django
Nginx:作為前端反向代理和靜態(tài)資源服務(wù)Gunicorn:處理 Python 后端應(yīng)用Supervisor:管理 Gunicorn 的守護(hù)進(jìn)程運(yùn)行
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
pandas如何實(shí)現(xiàn)兩個(gè)dataframe相減
這篇文章主要介紹了pandas如何實(shí)現(xiàn)兩個(gè)dataframe相減方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
基于Keras中Conv1D和Conv2D的區(qū)別說(shuō)明
這篇文章主要介紹了基于Keras中Conv1D和Conv2D的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
python實(shí)現(xiàn)會(huì)員信息管理系統(tǒng)(List)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)會(huì)員信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
Python使用execjs執(zhí)行包含中文參數(shù)的JavaScript
爬蟲的開發(fā)過(guò)程中,往往需要對(duì)JS進(jìn)行模擬,簡(jiǎn)單或者通用的還可以在Python中模擬或者找到對(duì)應(yīng)的第三方庫(kù),但是復(fù)雜的就可能不好實(shí)現(xiàn)了,下面這篇文章主要給大家介紹了關(guān)于Python使用execjs執(zhí)行包含中文參數(shù)的JavaScript的相關(guān)資料,需要的朋友可以參考下2022-03-03
Django實(shí)現(xiàn)接口token檢測(cè)的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何使用Django實(shí)現(xiàn)接口token檢測(cè),文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-03-03
Python OpenCV 使用滑動(dòng)條來(lái)調(diào)整函數(shù)參數(shù)的方法
這篇文章主要介紹了Python OpenCV 使用滑動(dòng)條來(lái)調(diào)整函數(shù)參數(shù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Django 導(dǎo)出 Excel 代碼的實(shí)例詳解
本篇文章主要介紹了Django 導(dǎo)出 Excel 代碼的實(shí)例詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08

