日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Gunicorn配置部分的翻译

發(fā)布時(shí)間:2023/12/1 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gunicorn配置部分的翻译 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫(xiě)在前面,雖然翻譯得很爛,但也是我的勞動(dòng)成果,轉(zhuǎn)載請(qǐng)注明出處,謝謝。
Gunicorn版本號(hào)19.7.1


Gunicorn配置

概述

三種配置方式

優(yōu)先級(jí)如下,越后的優(yōu)先級(jí)越大

1.框架的設(shè)置(現(xiàn)在只有paster在用這個(gè))

2.配置文件(推薦使用這個(gè))

3.命令行的賦值

查看配置的方法

$ gunicorn --check-config APP_MODULE

這個(gè)命令可以檢查app的配置

設(shè)置的參數(shù)詳細(xì)說(shuō)明

關(guān)于環(huán)境變量

如前文所講,可以通過(guò)多種方式來(lái)設(shè)置運(yùn)行參數(shù),但是有一些參數(shù)是只能寫(xiě)在配置文件中,而剩下那些可以寫(xiě)在命令行中的參數(shù),都是可以通過(guò)設(shè)置環(huán)境變量來(lái)設(shè)置的。

$ GUNICORN_CMD_ARGS="--bind=127.0.0.1 --workers=3" gunicorn app:app

config File

config 配置文件的地址

用法:'-c CONFIG, --config CONFIG'

默認(rèn)值:None

這個(gè)參數(shù)需要在命令行中傳入,或者作為應(yīng)用特定配置的一部分(后面半句我也不懂)

參數(shù)要求是文件的地址,或者是python的module(我猜是類(lèi)似 python:some_module.module.conf)

需要注意的是,如果參數(shù)是python的module,則參數(shù)的形式必須是python:module_name

Server Socket 服務(wù)端口

bind 綁定端口

用法:-b ADDRESS, --bind ADDRESS

默認(rèn)值:['127.0.0.1:8000']

就是指定綁定的端口號(hào)

官方提了一個(gè)可以綁定多個(gè)地址的例子

$ gunicorn -b 127.0.0.1:8000 -b [::1]:8000 test:app

如上,就是將app綁到了本地的ipv4和ipv6的接口

backlog 允許掛起的鏈接數(shù)

用法:--backlog INT

默認(rèn)值:2048

就是設(shè)置允許掛起的連接數(shù)的最大值

官方推薦這個(gè)值設(shè)在64-2048

Worker Processes 工作進(jìn)程相關(guān)

workers 進(jìn)程數(shù)量

用法:-w INT, --workers INT

默認(rèn)值:1

設(shè)置處理請(qǐng)求的進(jìn)程數(shù),官方推薦的值是2-4 x $(NUM_CORES),就是核心數(shù)的2-4倍,而我在網(wǎng)上查到的,大多數(shù)是推薦設(shè)置為核心數(shù)的兩倍+1

worker_class 進(jìn)程的工作方式

用法:-k STRING, --worker-class STRING

默認(rèn)值:sync

設(shè)置進(jìn)程的工作方式,默認(rèn)是同步,如果需要設(shè)置異步,則需要下載相關(guān)的庫(kù)

可選的參數(shù)如下:

*eventlet-要求eventlet版本大于0.9.7

*gevent-要求gevent版本大于0.13

*tornado-要求tornado版本大于0.2

*gthread-安裝了futures庫(kù)的python2(意思就是python3隨便用?)

*giohttp-python3.4以上,且aiohttp版本大于0.21.5

如果要用自己的庫(kù)來(lái)處理的話(huà),就將庫(kù)添加到gunicorn.workers,然后再選擇自己的worker

threads 線程數(shù)

用法:--threads INT

默認(rèn)值:1

就是設(shè)置開(kāi)啟的多線程的數(shù)目,官方也是推薦設(shè)置為核心數(shù)的兩至四倍。

這個(gè)設(shè)置只對(duì)進(jìn)程工作方式為Gthread的產(chǎn)生影響。

worker_connections 進(jìn)程鏈接數(shù)

用法:--workers-connections INT

默認(rèn)值:1000

設(shè)置同時(shí)鏈接客戶(hù)端的閥值。

這個(gè)設(shè)置只對(duì)進(jìn)程工作方式為Eventlet和Gevent的產(chǎn)生影響。

max_requests 最大請(qǐng)求數(shù)

用法:--max-requests INT

默認(rèn)值:0

設(shè)置一個(gè)進(jìn)程處理完max_requests次請(qǐng)求后自動(dòng)重啟

就是設(shè)置這個(gè)可以預(yù)防內(nèi)存泄漏,如果不設(shè)置的話(huà),則進(jìn)程不會(huì)自動(dòng)重啟

max_requests_jitter 最大請(qǐng)求數(shù)的變化值

用法:--max-requests-jitter INT

默認(rèn)值:0

這個(gè)的作用與max_requests的幾乎一致,只是后者設(shè)置為固定值,而這個(gè)的值是randint(0, max_requests_jitter)

timeout 過(guò)期時(shí)間

用法:-t INT, --timeout INT

默認(rèn)值:30

worker沉默(不工作?不發(fā)送response?)超過(guò)timeout秒之后就會(huì)重啟

對(duì)于同步worker來(lái)講,官方建議用default值就可以了,當(dāng)然,如果你確認(rèn)這個(gè)值不滿(mǎn)足你的要求的時(shí)候,可以調(diào)高。

對(duì)于異步worker來(lái)講,worker仍然會(huì)繼續(xù)通信(發(fā)response?),而且對(duì)于處理一個(gè)獨(dú)立的請(qǐng)求來(lái)講,它是與所需的時(shí)間無(wú)關(guān)。(個(gè)人理解為,對(duì)于異步來(lái)講,這個(gè)參數(shù)是沒(méi)有意義的)

graceful_time 優(yōu)雅的timeout(后置的timeout)

用法:--graceful-timeout INT

默認(rèn)值:30

其實(shí)就是當(dāng)worker接收到重啟的信號(hào)之后,再工作這么久才真正執(zhí)行重啟。

keepalive 鏈接存活時(shí)間

用法:--keep-alive INT

默認(rèn)值:2

發(fā)送完一個(gè)response后,等待keepalive秒再關(guān)閉連接

建議設(shè)置為1-5

Security 安全方面的設(shè)置

limit_request_line 設(shè)置請(qǐng)求行的最大長(zhǎng)度

用法:--limit-request-line INT

默認(rèn)值:4094

允許設(shè)置的值為0-8190,0是不限制的意思。

文檔中提到這個(gè)參數(shù)可以防止DDOS攻擊,具體我還要去查一下為什么。

(網(wǎng)上查到的request-line其實(shí)就是請(qǐng)求的第一行,后面的都是鍵值對(duì)。因?yàn)镽ESTful的要求,這個(gè)第一行會(huì)包含挺多的信息)

limit_request_fields 設(shè)置請(qǐng)求頭的字段的范圍

用法:--limit-request-fields INT

默認(rèn)值:100

(這個(gè)我并不是很懂)

limit_request_field_size 設(shè)置請(qǐng)求頭的大小

用法:--limit-request-field_size INT

默認(rèn)值:8190

Debugging 調(diào)試

reload 重載

用法:--reload

默認(rèn)值:False

更改代碼的時(shí)候重啟workers, 只建議在開(kāi)發(fā)過(guò)程中開(kāi)啟。

文檔推薦下載inotify這個(gè)包來(lái)作為重載引擎。

reload_engine 重載的引擎

用法:--reload-engine STRING

默認(rèn)值:auto

選擇重載的引擎,支持的有三種,分別是auto,poll,inotify(需要單獨(dú)安裝)

spew 顯示

用法:--spew

默認(rèn)值:False

啟動(dòng)一個(gè)能夠?qū)⒎?wù)器執(zhí)行過(guò)的每一條語(yǔ)句都打印出來(lái)的函數(shù),然后這個(gè)選項(xiàng)是原子性的,就是要么全打,要么不打。

check_config 檢查配置

用法:--check-config

默認(rèn)值:False

顯示現(xiàn)在的配置。

Server Mechanics 服務(wù)結(jié)構(gòu)方面

preload_app 預(yù)重載應(yīng)用

用法:--preload

默認(rèn)值:False

在worker進(jìn)程被復(fù)制(派生)之前載入應(yīng)用的代碼。

通過(guò)預(yù)加載應(yīng)用,可以節(jié)省內(nèi)存資源和提高服務(wù)啟動(dòng)時(shí)間。當(dāng)然,如果你將應(yīng)用加載進(jìn)worker進(jìn)程這個(gè)動(dòng)作延后,那么重啟worker將會(huì)容易很多。

sendfile 發(fā)送文件?

用法:--no-sendfile

默認(rèn)值:None

這個(gè)值可以在環(huán)境變量設(shè)置。(文檔中并沒(méi)有提到這個(gè)選項(xiàng)是干嘛的 )

chdir 改變目錄?

用法:--chdir

默認(rèn)值:/home/docs/checkouts/readthedocs.org/user_builds/gunicorn-docs/checkouts/latest/docs/source

在載入應(yīng)用之前改變目錄(但是文檔中沒(méi)講明白這個(gè)目錄是存放什么的)

daemon 守護(hù)進(jìn)程

用法:-D, --daemon

默認(rèn)值:False

以守護(hù)進(jìn)程形式來(lái)運(yùn)行Gunicorn進(jìn)程。

其實(shí)就是將這個(gè)服務(wù)放到后臺(tái)去運(yùn)行。

raw_env 設(shè)置環(huán)境變量

用法:-e ENV, --env ENV

默認(rèn)值:[]

用鍵值對(duì)來(lái)設(shè)置環(huán)境變量。

$ gunicorn -b 127.0.0.1:8000 --env FOO=1 test:app

pidfile 進(jìn)程文件名

用法:-p FILE, --pid FILE

默認(rèn)值:None

設(shè)置pid文件的文件名,如果不設(shè)置的話(huà),不會(huì)創(chuàng)建pid文件。

worker_tmp_dir 工作臨時(shí)地址

用法:--worker-tmp-dir DIR

默認(rèn)值:None

設(shè)置工作的臨時(shí)文件夾的地址。

如果不設(shè)置,則會(huì)采用默認(rèn)值,也就是調(diào)用os.fchmod來(lái)找一個(gè)地址,但是如果這個(gè)地址是disk-backed類(lèi)型的文件系統(tǒng),很有可能會(huì)讓worker阻塞;或者如果默認(rèn)的硬盤(pán)滿(mǎn)掉了,Gunicorn也不會(huì)啟動(dòng)。所以文檔建議我們?cè)谛聮燧d一個(gè)/tmpfs,然后把這個(gè)地址賦到這里來(lái)

sudo cp /etc/fstab /etc/fstab.orig sudo mkdir /mem echo 'tmpfs /mem tmpfs defaults,size=64m,mode=1777,noatime,comment=for-gunicorn 0 0' | sudo tee -a /etc/fstab sudo mount /mem ..... --worker-tmp-dir /mem

user 設(shè)置用戶(hù)

用法:-u USER, --user USER

默認(rèn)值:1005

選擇一個(gè)工作進(jìn)程來(lái)作為當(dāng)前用戶(hù)。

這里可以輸入有效的用戶(hù)id或者用戶(hù)名,那么在用pwd.getpwnam(value)的時(shí)候就可以取到這個(gè)值。如果輸入None,則不會(huì)改變當(dāng)前工作進(jìn)程的用戶(hù)。

group 設(shè)置用戶(hù)組

用法:-g GROUP, --group GROUP

默認(rèn)值:205

與上面那個(gè)類(lèi)似。

umask 權(quán)限掩碼

用法:-m INT, --umask INT

默認(rèn)值:0

Gunicorn對(duì)寫(xiě)文件的權(quán)限。

initgroups 設(shè)置新組

用法:--initgroups

默認(rèn)值:False

設(shè)置為真的時(shí)候,會(huì)將所有worker進(jìn)程加到一個(gè)指定名字的新組中。

tmp_upload_dir 上傳文件的臨時(shí)存放地址

默認(rèn)值:None

保存那些臨時(shí)的請(qǐng)求內(nèi)容。

文檔講這個(gè)選型未來(lái)可能會(huì)被移除。

如果設(shè)置了路徑,要確保worker進(jìn)程有權(quán)限去寫(xiě)。如果不設(shè)置,則會(huì)選擇/tmp來(lái)存放。

secure_scheme_headers

默認(rèn)值:{'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}

這個(gè)字典指明了哪些請(qǐng)求頭是HTTPS請(qǐng)求。

forwarded_allow_ips 選擇接收的對(duì)象

用法:--forwarded-allow-ips STRING

默認(rèn)值:127.0.0.1

比如在跟Nginx一起部署的時(shí)候,如果Nginx不在本機(jī)上(localhost),為了避免偽造host的攻擊,可以指定只接收從那些指定的地址傳來(lái)的連接,而如果Nginx就在本機(jī)上,就直接按默認(rèn)的127.0.0.1就行了。

Logging 日志設(shè)置

accesslog 設(shè)置訪問(wèn)日志存放的地方

用法:--access-logfile FILE

默認(rèn)值:None

設(shè)置為-就是記錄到標(biāo)準(zhǔn)輸出。

access_log_format 訪問(wèn)日志的格式

用法:--access-logformat STRING

默認(rèn)值:%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"

IdentifierDescription
hremote address
l'-'
uuser name
tdate of the request
rstatus line (e.g. GET / HTTP/1.1)
mrequest method
UURL path without query string
qquery string
Hprotocol
sstatus
Bresponse length
bresponse length or '-' (CLF format)
freferer
auser agent
Trequest time in seconds
Drequest time in microseconds
Lrequest time in decimal seconds
pprocess ID
{Header}irequest header
{Header}oresponse header
{Variable}eenvironment variable

errorlog 設(shè)置錯(cuò)誤日志的存放地址

用法:--error-logfile FILE, --log-file FILE

默認(rèn)值:-

設(shè)置為-就是記錄到標(biāo)準(zhǔn)輸出。

loglevel 設(shè)置日志等級(jí)

用法:--log-level LEVEL

默認(rèn)值:info

debug,info,warning,error,critical

capture_output 捕捉標(biāo)準(zhǔn)輸出

用法:--capture-output

默認(rèn)值:False

重定向標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤信息到錯(cuò)誤日志。

logger_class 選擇處理日志的方法

用法:--logger-class STRING

默認(rèn)值:gunicorn.glogging.Logger

logconfig 日志的配置

用法:--log-config FILE

默認(rèn)值:None

默認(rèn)使用python標(biāo)準(zhǔn)庫(kù)logging的配置文件形式。

syslog_addr 系統(tǒng)日志的地址

用法:--log-syslog-to SYSLOG_ADDR

默認(rèn)值:udp://localhost:514

設(shè)置發(fā)送系統(tǒng)日志信息的地址。

可傳遞的方式

  • unix://PATH#TYPE對(duì)于unix的socket來(lái)講,可以用stream或者gram形式。
  • udp://HOST:PORT
  • tcp://HOST:PORT

syslog 啟用系統(tǒng)日志來(lái)記載

用法:--log-syslog

默認(rèn)值:False

把Gunicorn的日志發(fā)送到系統(tǒng)日志。

syslog_prefix 系統(tǒng)日志的前綴

用法:--log-syslog-prefix SYSLOG_RREFIX

默認(rèn)值:None

設(shè)置每條系統(tǒng)日志的前綴,默認(rèn)是進(jìn)程的名字。

syslog_facility 系統(tǒng)日志的別名

用法:--log-syslog-facility SYSLOG_FACILITY

默認(rèn)值:user

enable_stdio_inheritance 標(biāo)準(zhǔn)輸入輸出的繼承

用法:-R, --enable-stdio-inhertitance

默認(rèn)值:False

允許標(biāo)準(zhǔn)輸入輸出的繼承,允許標(biāo)準(zhǔn)輸入輸出文件描述符在守護(hù)進(jìn)程模式下的繼承。

可以設(shè)置環(huán)境變量PYHTONUNBUFFERED來(lái)取消python標(biāo)準(zhǔn)輸出的緩存(?)

statsd_host

網(wǎng)上查到statsd的意思是單機(jī)搭建,暫時(shí)沒(méi)理解是什么意思。

statsd_prefix

不懂不懂

Process Naming 進(jìn)程命名

proc_name 設(shè)置進(jìn)程名字

用法:-n STRING, --name STRING

默認(rèn)值:None

用setproctitle這個(gè)模塊(需要額外安裝)去給進(jìn)程命名,方便我們?cè)趐s或者top的時(shí)候分辨出哪個(gè)是我們想要的。

不設(shè)置的時(shí)候,會(huì)用default_proc_name

default_proc_name 默認(rèn)的進(jìn)程名

gunicorn

Server Mechanics 服務(wù)架構(gòu)

pythonpath

用法:--pythonpath STRING

默認(rèn)值:None

將這些路徑加到python path去

e.g.'/home/djangoprojects/myproject,/home/python/mylibrary'

paste

PASS

Server Hooks 服務(wù)的鉤子函數(shù)

on_starting

def on_starting(sever):pass

這個(gè)函數(shù)會(huì)在主進(jìn)程初始化后被調(diào)用。

函數(shù)需要接收一個(gè)服務(wù)的實(shí)例作為參數(shù)。

on_reload

def on_reload(server):pass

函數(shù)會(huì)在接收到掛起信號(hào)而重載的時(shí)候被調(diào)用。

函數(shù)需要接收一個(gè)服務(wù)的實(shí)例作為參數(shù)。

when_ready

def when_ready(sever):pass

函數(shù)會(huì)在服務(wù)啟動(dòng)之后就被調(diào)用。

函數(shù)需要接收一個(gè)服務(wù)的實(shí)例作為參數(shù)。

pre_fork

def post_fork(sever, worker):pass

函數(shù)在worker派生(生成)之前被調(diào)用。

函數(shù)需要接收一個(gè)服務(wù)的實(shí)例和一個(gè)新的worker。(不懂,既然函數(shù)是在生成worker之前調(diào)用,那又怎么將這個(gè)未生成的worker傳到這個(gè)函數(shù)里面來(lái)呢)

post_fork

def post_fork(sever, worker):pass

函數(shù)在worker派生(生成)之后被調(diào)用。

函數(shù)需要接收一個(gè)服務(wù)的實(shí)例和一個(gè)新的worker。

post_worker_init

def post_worker_init(worker):pass

函數(shù)在worker完成應(yīng)用初始化之后被調(diào)用。

函數(shù)需要接收一個(gè)完成初始化的worker。

work_int

def worker_int(worker):pass

函數(shù)會(huì)在worker退出信號(hào)流(?)或者掛起的時(shí)候調(diào)用。

函數(shù)需要接收一個(gè)完成初始化的worker。

work_abort

def worker_abort(worker):pass

函數(shù)會(huì)在worker接收到請(qǐng)求異常終止信號(hào)的時(shí)候被調(diào)用。

一般這個(gè)情況發(fā)生在timeout(超時(shí))。

函數(shù)需要接收一個(gè)完成初始化的worker。

pre_exec

def pre_exec(server):pass

函數(shù)會(huì)在新的主進(jìn)程生成(派生)之前被調(diào)用。

函數(shù)需要接收一個(gè)服務(wù)的實(shí)例。

pre_request

def pre_request(worker, req):worker.log.debug("%s %s" % (req.method, req.path))

函數(shù)會(huì)在worker處理請(qǐng)求之前被調(diào)用。

函數(shù)需要接收這個(gè)worker,和請(qǐng)求作為參數(shù)。

post_request

def post_request(worker, req, environ, resp):pass

函數(shù)會(huì)在worker處理請(qǐng)求后被調(diào)用。

函數(shù)需要接收這個(gè)worker,和請(qǐng)求作為參數(shù)。

child_exit

def child_ext(sever, worker):pass

函數(shù)會(huì)在worker完全退出之后,在主進(jìn)程被調(diào)用。

函數(shù)需要接收這個(gè)服務(wù)的實(shí)例,和這個(gè)worker作為參數(shù)。

worker_exit

def worker_exit(server, worker):pass

函數(shù)會(huì)在worker完全退出之后,在worker進(jìn)程被調(diào)用。

函數(shù)需要接收這個(gè)服務(wù)的實(shí)例,和這個(gè)worker作為參數(shù)。

nworkers_changed

def nworkers_changed(server, new_value, old_value):pass

函數(shù)在worker數(shù)量產(chǎn)生變化后被調(diào)用。

函數(shù)接收的參數(shù)為,服務(wù)的實(shí)例,新的worker數(shù)量,和變化之前的數(shù)量。

第一次的時(shí)候,old_value是None

on_exit

def on_exit(server):pass

函數(shù)在退出Gunicorn的時(shí)候被調(diào)用。

函數(shù)接收服務(wù)的實(shí)例作為參數(shù)。

Server Mechanics

proxy_protocol 代理協(xié)議

用法:--proxy_protocol

默認(rèn)值:False

使用代理模式。

文檔介紹了開(kāi)啟這個(gè)模式后,可以讓stunnel作為HTTPS的前端,然后Gunicorn作為HTTP的服務(wù)器。(并不是很懂,暫時(shí)略過(guò))

proxy_allow_ips

用法:--proxy-allow-from

默認(rèn)值:127.0.0.1

不懂不懂

設(shè)置*來(lái)禁用這個(gè)功能。

SSL

keyfile

用法:--keyfile FILE

默認(rèn)值:None

指定ssl的key文件(那是公匙還是私匙?)

certfile

用法:--certfile FILE

默認(rèn)值:None

指定ssl的證書(shū)文件

ssl_version

用法:--ssl-version

默認(rèn)值:2

指定使用的ssl版本(也要看標(biāo)準(zhǔn)庫(kù)的ssl模塊是否支持)

cert_reqs

用法:--cert-reqs

默認(rèn)值:0

是否需要客戶(hù)端提供證書(shū)(也要看標(biāo)準(zhǔn)庫(kù)的ssl模塊是否支持)

ca_certs

用法:--ca-certs FILE

默認(rèn)值:None

指定CA證書(shū)文件

suppress_ragged_eofs

用法:--suppress-ragged-eofs

默認(rèn)值:True

禁止粗魯?shù)耐V?#xff1f;不是很懂

do_handshake_on_connect

用法:--do-handshake-on-connect

默認(rèn)值:False

在socket連接的時(shí)候是否執(zhí)行ssl握手(也要看標(biāo)準(zhǔn)庫(kù)的ssl模塊是否支持)

ciphers

用法:--ciphers

默認(rèn)值:TLSv1

指定使用的加密算法(也要看標(biāo)準(zhǔn)庫(kù)的ssl模塊是否支持)

Server Mechanics

raw_paste_global_conf

pass

轉(zhuǎn)載于:https://www.cnblogs.com/nanrou/p/7026789.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Gunicorn配置部分的翻译的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。