Sanic框架應(yīng)用部署方法詳解
本文實(shí)例講述了Sanic框架應(yīng)用部署方法。分享給大家供大家參考,具體如下:
簡介
Sanic是一個(gè)類似Flask的Python 3.5+ Web服務(wù)器,它的寫入速度非常快。除了Flask之外,Sanic還支持異步請求處理程序。這意味著你可以使用Python 3.5中新的閃亮的異步/等待語法,使你的代碼非阻塞和快速。
在之前的博文中已經(jīng)講到如何使用Sanic開發(fā)一個(gè)Python后臺程序,接下來記錄一下怎么部署Sanic應(yīng)用
部署
內(nèi)置的網(wǎng)絡(luò)服務(wù)器簡化了Sanic的部署,在定義了一個(gè)sanic.Sanic
實(shí)例之后,可以調(diào)用run()
方法再傳入以下關(guān)鍵字參數(shù):
- host:主機(jī)服務(wù)器的地址,默認(rèn)為
127.0.0.1
- port:啟動(dòng)服務(wù)器的斷開,默認(rèn)為8000
- debug:啟用調(diào)試輸出,默認(rèn)為
False
- ssl:SSLContext用于工作人員的ssl加密,默認(rèn)為
None
- sock:服務(wù)器接受連接的套接字,默認(rèn)為
None
- wrokers:產(chǎn)生工作進(jìn)程的數(shù)量,默認(rèn)為1
- loop:一個(gè)
asyncio
兼容的循環(huán)事件。如果沒有指定,Sanic創(chuàng)建它自己的事情循環(huán),默認(rèn)為None
- protocol:
asyncio.protocol
的子類,默認(rèn)為HttpProtocol
wrokers
默認(rèn)情況下,Sanic只使用一個(gè)CPU在主進(jìn)程中進(jìn)行監(jiān)聽,有時(shí)我們?yōu)榱速Y源利用最大化,可以指定run
參數(shù)的workers
數(shù)量即可:
app.run(host="0.0.0.0",port=5000,wrokers=4)
Sanic會自動(dòng)在多個(gè)進(jìn)行中交換路線,所以如果有多個(gè)CPU,建議盡可能多的workers
通過命令運(yùn)行
如果你喜歡命令行參數(shù),則你可以通過執(zhí)行模塊來啟動(dòng)Sanic服務(wù)器。例如,你將Sanic初始化為app的文件名為manager.py,則可以像這樣運(yùn)行服務(wù)器:
用命令行的方式運(yùn)行sanic程序,則不需要再Python文件中調(diào)用app.run()
方法了
通過Gunicorn運(yùn)行
了解過Gunicorn的都知道,Gunicorn為WSGI容器的一種,常見的還有uWSGI(可參考附錄Gunicorn配置說明)
為了使用Gunicorn運(yùn)行Sanic程序,我們還需要設(shè)置worker-class
參數(shù),并將其設(shè)置為sanic.worker.GunicornWorker
:
如果你的應(yīng)用程序遭受內(nèi)存泄漏,你可以將Gunicorn配置在完成指定數(shù)量的請求之后正常重新啟動(dòng)工作程序,這可以幫助限制內(nèi)存泄漏的影響
在前面的文章《Python Web編程之WSGI協(xié)議》中有記錄WSGI容器的作用,以及我們知道常見的容器就只有的uWSGI和Gunicorn,在《Python Web編程之WSGI協(xié)議》中有記錄他們的特性及優(yōu)缺點(diǎn),在這就不在多做描述。接下來將著重記錄一下Gunicorn的一些配置:
config
-c CONFIG, --config CONFIG
Gunicorn配置文件路徑,路徑形式的字符串格式,如:
gunicorn -c gunicorn.conf manager:app
bind
-b ADDRESS, --bind ADDRESS
Gunicorn綁定服務(wù)器套接字,Host形式的字符串格式。Gunicorn可綁定多個(gè)套接字,如:
gunicorn -b 127.0.0.1:8000 -b [::1]:9000 manager:app
backlog
--backlog
未決連接的最大數(shù)量,即等待服務(wù)的客戶的數(shù)量。必須是正整數(shù),一般設(shè)定在64~2048的范圍內(nèi),一般設(shè)置為2048,超過這個(gè)數(shù)字將導(dǎo)致客戶端在嘗試連接時(shí)錯(cuò)誤
workers
-w INT, --workers INT
用于處理工作進(jìn)程的數(shù)量,為正整數(shù),默認(rèn)為1。worker
推薦的數(shù)量為當(dāng)前的CPU個(gè)數(shù)*2 + 1。計(jì)算當(dāng)前的CPU個(gè)數(shù)方法:
import multiprocessing print multiprocessing.cpu_count()
worker_class
-k STRTING, --worker-class STRTING
要使用的工作模式,默認(rèn)為sync
??梢靡韵鲁R婎愋汀白址弊鳛槔夘悾?/p>
- sync
- eventlet:需要下載eventlet>=0.9.7
- gevent:需要下載gevent>=0.13
- tornado:需要下載tornado>=0.2
- gthread
- gaiohttp:需要python 3.4和aiohttp>=0.21.5
threads
--threads INT
處理請求的工作線程數(shù),使用指定數(shù)量的線程運(yùn)行每個(gè)worker。為正整數(shù),默認(rèn)為1。
worker_connections
--worker-connections INT
最大客戶端并發(fā)數(shù)量,默認(rèn)情況下這個(gè)值為1000。此設(shè)置將影響gevent
和eventlet
工作模式
max_requests
--max-requests INT
重新啟動(dòng)之前,工作將處理的最大請求數(shù)。默認(rèn)值為0。
max_requests_jitter
--max-requests-jitter INT
要添加到max_requests
的最大抖動(dòng)。抖動(dòng)將導(dǎo)致每個(gè)工作的重啟被隨機(jī)化,這是為了避免所有工作被重啟。randint(0,max-requests-jitter)
timeout
-t INT, --timeout INT
超過這么多秒后工作將被殺掉,并重新啟動(dòng)。一般設(shè)定為30秒
graceful_timeout
--graceful-timeout INT
優(yōu)雅的人工超時(shí)時(shí)間,默認(rèn)情況下,這個(gè)值為30。收到重啟信號后,工作人員有那么多時(shí)間來完成服務(wù)請求。在超時(shí)(從接收到重啟信號開始)之后仍然活著的工作將被強(qiáng)行殺死。
keepalive
--keep-alive INT
在keep-alive連接上等待請求的秒數(shù),默認(rèn)情況下值為2。一般設(shè)定在1~5秒之間。
limit_request_line
--limit-request-line INT
HTTP請求行的最大大小,此參數(shù)用于限制HTTP請求行的允許大小,默認(rèn)情況下,這個(gè)值為4094。值是0~8190的數(shù)字。此參數(shù)可以防止任何DDOS攻擊
limit_request_fields
--limit-request-fields INT
限制HTTP請求中請求頭字段的數(shù)量。此字段用于限制請求頭字段的數(shù)量以防止DDOS攻擊,與limit-request-field-size一起使用可以提高安全性。默認(rèn)情況下,這個(gè)值為100,這個(gè)值不能超過32768
limit_request_field_size
--limit-request-field-size INT
限制HTTP請求中請求頭的大小,默認(rèn)情況下這個(gè)值為8190。值是一個(gè)整數(shù)或者0,當(dāng)該值為0時(shí),表示將對請求頭大小不做限制
reload
--reload
代碼更新時(shí)將重啟工作,默認(rèn)為False。此設(shè)置用于開發(fā),每當(dāng)應(yīng)用程序發(fā)生更改時(shí),都會導(dǎo)致工作重新啟動(dòng)。
reload_engine
--reload-engine STRTING
選擇重載的引擎,支持的有三種:
- auto
- pull
- inotity:需要下載
spew
--spew
打印服務(wù)器執(zhí)行過的每一條語句,默認(rèn)False。此選擇為原子性的,即要么全部打印,要么全部不打印
check_config
--check-config
顯示現(xiàn)在的配置,默認(rèn)值為False,即顯示。
preload_app
--preload
在工作進(jìn)程被復(fù)制(派生)之前加載應(yīng)用程序代碼,默認(rèn)為False。通過預(yù)加載應(yīng)用程序,你可以節(jié)省RAM資源,并且加快服務(wù)器啟動(dòng)時(shí)間。
chdir
--chdir
加載應(yīng)用程序之前將chdir目錄指定到指定目錄
daemon
--daemon
守護(hù)Gunicorn進(jìn)程,默認(rèn)False
raw_env
-e ENV, --env ENV
設(shè)置環(huán)境變量(key=value),將變量傳遞給執(zhí)行環(huán)境,如:
gunicorin -b 127.0.0.1:8000 -e abc=123 manager:app
在配置文件中寫法:
raw_env=["abc=123"]
pidfile
-p FILE, --pid FILE
設(shè)置pid文件的文件名,如果不設(shè)置將不會創(chuàng)建pid文件
worker_tmp_dir
--worker-tmp-dir DIR
設(shè)置工作臨時(shí)文件目錄,如果不設(shè)置會采用默認(rèn)值。
accesslog
--access-logfile FILE
要寫入的訪問日志目錄
access_log_format
--access-logformat STRING
要寫入的訪問日志格式。如:
access_log_format = '%(h)s %(l)s %(u)s %(t)s'
常見格式說明:
識別碼 | 說明 |
---|---|
h | 遠(yuǎn)程地址 |
l | “-“ |
u | 用戶名 |
t | 時(shí)間 |
r | 狀態(tài)行,如:GET /test HTTP/1.1 |
m | 請求方法 |
U | 沒有查詢字符串的URL |
q | 查詢字符串 |
H | 協(xié)議 |
s | 狀態(tài)碼 |
B | response長度 |
b | response長度(CLF格式) |
f | 參考 |
a | 用戶代理 |
T | 請求時(shí)間,單位為s |
D | 請求時(shí)間,單位為ms |
p | 進(jìn)程id |
{Header}i | 請求頭 |
{Header}o | 相應(yīng)頭 |
{Variable}e | 環(huán)境變量 |
errorlog
--error-logfile FILE, --log-file FILE
要寫入錯(cuò)誤日志的文件目錄。
loglevel
--log-level LEVEL
錯(cuò)誤日志輸出等級。
支持的級別名稱為:
- debug(調(diào)試)
- info(信息)
- warning(警告)
- error(錯(cuò)誤)
- critical(危急)
Gunicorn的更多配置可參考:http://docs.gunicorn.org/en/stable/settings.html#server-mechanics
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python入門與進(jìn)階經(jīng)典教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
利用Python實(shí)時(shí)獲取steam特惠游戲數(shù)據(jù)
Steam是由美國電子游戲商Valve于2003年9月12日推出的數(shù)字發(fā)行平臺,被認(rèn)為是計(jì)算機(jī)游戲界最大的數(shù)碼發(fā)行平臺之一。本文將利用Python實(shí)時(shí)獲取steam特惠游戲數(shù)據(jù),感興趣的可以嘗試一下2022-06-06基于Python實(shí)現(xiàn)2種反轉(zhuǎn)鏈表方法代碼實(shí)例
這篇文章主要介紹了基于Python實(shí)現(xiàn)2種反轉(zhuǎn)鏈表方法代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07python實(shí)現(xiàn)自動(dòng)登錄后臺管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)自動(dòng)登錄后臺管理系統(tǒng),并進(jìn)行后續(xù)操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10python將字符串轉(zhuǎn)換成json的方法小結(jié)
這篇文章主要介紹了python將字符串轉(zhuǎn)換成json的方法小結(jié),通過實(shí)例代碼給大家介紹將字符串型的數(shù)據(jù)轉(zhuǎn)換成dict類型遇到的問題,需要的朋友可以參考下2019-07-07python QT界面關(guān)閉線程池的線程跟隨退出完美解決方案
這篇文章主要介紹了python QT界面關(guān)閉,線程池的線程跟隨退出解決思路方法,本文給大家分享兩種方法結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11關(guān)于python基礎(chǔ)數(shù)據(jù)類型bytes進(jìn)制轉(zhuǎn)換
Python 3.x之后,Python自帶字符默認(rèn)使用utf-8格式編碼和顯示,bytes數(shù)據(jù)類型是utf-8格式的二進(jìn)制形式的不可變序列,需要的朋友可以參考下2023-05-05windows10系統(tǒng)中安裝python3.x+scrapy教程
本文給大家主要介紹了在windows10系統(tǒng)中安裝python3以及scrapy框架的教程以及有可能會遇到的問題的解決辦法,希望大家能夠喜歡2016-11-11基于使用paramiko執(zhí)行遠(yuǎn)程linux主機(jī)命令(詳解)
下面小編就為大家?guī)硪黄谑褂胮aramiko執(zhí)行遠(yuǎn)程linux主機(jī)命令(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10解決Django中修改js css文件但瀏覽器無法及時(shí)與之改變的問題
今天小編就為大家分享一篇解決Django中修改js css文件但瀏覽器無法及時(shí)與之改變的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08