亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Sanic框架應用部署方法詳解

發布時間:2020-09-14 22:45:44 來源:腳本之家 閱讀:558 作者:噴跑的豆子 欄目:開發技術

本文實例講述了Sanic框架應用部署方法。分享給大家供大家參考,具體如下:

簡介

Sanic是一個類似Flask的Python 3.5+ Web服務器,它的寫入速度非常快。除了Flask之外,Sanic還支持異步請求處理程序。這意味著你可以使用Python 3.5中新的閃亮的異步/等待語法,使你的代碼非阻塞和快速。

在之前的博文中已經講到如何使用Sanic開發一個Python后臺程序,接下來記錄一下怎么部署Sanic應用

部署

內置的網絡服務器簡化了Sanic的部署,在定義了一個sanic.Sanic實例之后,可以調用run()方法再傳入以下關鍵字參數:

  • host:主機服務器的地址,默認為127.0.0.1
  • port:啟動服務器的斷開,默認為8000
  • debug:啟用調試輸出,默認為False
  • ssl:SSLContext用于工作人員的ssl加密,默認為None
  • sock:服務器接受連接的套接字,默認為None
  • wrokers:產生工作進程的數量,默認為1
  • loop:一個asyncio兼容的循環事件。如果沒有指定,Sanic創建它自己的事情循環,默認為None
  • protocolasyncio.protocol的子類,默認為HttpProtocol

wrokers

默認情況下,Sanic只使用一個CPU在主進程中進行監聽,有時我們為了資源利用最大化,可以指定run參數的workers數量即可:

app.run(host="0.0.0.0",port=5000,wrokers=4)

Sanic會自動在多個進行中交換路線,所以如果有多個CPU,建議盡可能多的workers

通過命令運行

如果你喜歡命令行參數,則你可以通過執行模塊來啟動Sanic服務器。例如,你將Sanic初始化為app的文件名為manager.py,則可以像這樣運行服務器:

復制代碼 代碼如下:
python -m sanic manager.app --host=0.0.0.0 --port=5000 --workers=4

用命令行的方式運行sanic程序,則不需要再Python文件中調用app.run()方法了

通過Gunicorn運行

了解過Gunicorn的都知道,Gunicorn為WSGI容器的一種,常見的還有uWSGI(可參考附錄Gunicorn配置說明)

為了使用Gunicorn運行Sanic程序,我們還需要設置worker-class參數,并將其設置為sanic.worker.GunicornWorker

復制代碼 代碼如下:
gunicorn manager:app bind 0.0.0.0:5000 worker-class sanic.worker.GunicornWorker

如果你的應用程序遭受內存泄漏,你可以將Gunicorn配置在完成指定數量的請求之后正常重新啟動工作程序,這可以幫助限制內存泄漏的影響

附錄:Gunicorn配置說明

在前面的文章《Python Web編程之WSGI協議》中有記錄WSGI容器的作用,以及我們知道常見的容器就只有的uWSGI和Gunicorn,在《Python Web編程之WSGI協議》中有記錄他們的特性及優缺點,在這就不在多做描述。接下來將著重記錄一下Gunicorn的一些配置:

config

-c CONFIG, --config CONFIG

Gunicorn配置文件路徑,路徑形式的字符串格式,如:

gunicorn -c gunicorn.conf manager:app

bind

-b ADDRESS, --bind ADDRESS

Gunicorn綁定服務器套接字,Host形式的字符串格式。Gunicorn可綁定多個套接字,如:

gunicorn -b 127.0.0.1:8000 -b [::1]:9000 manager:app

backlog

--backlog

未決連接的最大數量,即等待服務的客戶的數量。必須是正整數,一般設定在64~2048的范圍內,一般設置為2048,超過這個數字將導致客戶端在嘗試連接時錯誤

workers

-w INT, --workers INT

用于處理工作進程的數量,為正整數,默認為1。worker推薦的數量為當前的CPU個數*2 + 1。計算當前的CPU個數方法:

import multiprocessing
print multiprocessing.cpu_count()

worker_class

-k STRTING, --worker-class STRTING

要使用的工作模式,默認為sync。可引用以下常見類型“字符串”作為捆綁類:

  • 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

處理請求的工作線程數,使用指定數量的線程運行每個worker。為正整數,默認為1。

worker_connections

--worker-connections INT

最大客戶端并發數量,默認情況下這個值為1000。此設置將影響geventeventlet工作模式

max_requests

--max-requests INT

重新啟動之前,工作將處理的最大請求數。默認值為0。

max_requests_jitter

--max-requests-jitter INT

要添加到max_requests的最大抖動。抖動將導致每個工作的重啟被隨機化,這是為了避免所有工作被重啟。randint(0,max-requests-jitter)

timeout

-t INT, --timeout INT

超過這么多秒后工作將被殺掉,并重新啟動。一般設定為30秒

graceful_timeout

--graceful-timeout INT

優雅的人工超時時間,默認情況下,這個值為30。收到重啟信號后,工作人員有那么多時間來完成服務請求。在超時(從接收到重啟信號開始)之后仍然活著的工作將被強行殺死。

keepalive

--keep-alive INT

在keep-alive連接上等待請求的秒數,默認情況下值為2。一般設定在1~5秒之間。

limit_request_line

--limit-request-line INT

HTTP請求行的最大大小,此參數用于限制HTTP請求行的允許大小,默認情況下,這個值為4094。值是0~8190的數字。此參數可以防止任何DDOS攻擊

limit_request_fields

--limit-request-fields INT

限制HTTP請求中請求頭字段的數量。此字段用于限制請求頭字段的數量以防止DDOS攻擊,與limit-request-field-size一起使用可以提高安全性。默認情況下,這個值為100,這個值不能超過32768

limit_request_field_size

--limit-request-field-size INT

限制HTTP請求中請求頭的大小,默認情況下這個值為8190。值是一個整數或者0,當該值為0時,表示將對請求頭大小不做限制

reload

--reload

代碼更新時將重啟工作,默認為False。此設置用于開發,每當應用程序發生更改時,都會導致工作重新啟動。

reload_engine

--reload-engine STRTING

選擇重載的引擎,支持的有三種:

  • auto
  • pull
  • inotity:需要下載

spew

--spew

打印服務器執行過的每一條語句,默認False。此選擇為原子性的,即要么全部打印,要么全部不打印

check_config

--check-config

顯示現在的配置,默認值為False,即顯示。

preload_app

--preload

在工作進程被復制(派生)之前加載應用程序代碼,默認為False。通過預加載應用程序,你可以節省RAM資源,并且加快服務器啟動時間。

chdir

--chdir

加載應用程序之前將chdir目錄指定到指定目錄

daemon

--daemon

守護Gunicorn進程,默認False

raw_env

-e ENV, --env ENV

設置環境變量(key=value),將變量傳遞給執行環境,如:

gunicorin -b 127.0.0.1:8000 -e abc=123 manager:app

在配置文件中寫法:

raw_env=["abc=123"]

pidfile

-p FILE, --pid FILE

設置pid文件的文件名,如果不設置將不會創建pid文件

worker_tmp_dir

--worker-tmp-dir DIR

設置工作臨時文件目錄,如果不設置會采用默認值。

accesslog

--access-logfile FILE

要寫入的訪問日志目錄

access_log_format

--access-logformat STRING

要寫入的訪問日志格式。如:

access_log_format = '%(h)s %(l)s %(u)s %(t)s'

常見格式說明:

識別碼 說明
h 遠程地址
l “-“
u 用戶名
t 時間
r 狀態行,如:GET /test HTTP/1.1
m 請求方法
U 沒有查詢字符串的URL
q 查詢字符串
H 協議
s 狀態碼
B response長度
b response長度(CLF格式)
f 參考
a 用戶代理
T 請求時間,單位為s
D 請求時間,單位為ms
p 進程id
{Header}i 請求頭
{Header}o 相應頭
{Variable}e 環境變量

errorlog

--error-logfile FILE, --log-file FILE

要寫入錯誤日志的文件目錄。

loglevel

--log-level LEVEL

錯誤日志輸出等級。

支持的級別名稱為:

  • debug(調試)
  • info(信息)
  • warning(警告)
  • error(錯誤)
  • critical(危急)

Gunicorn的更多配置可參考:http://docs.gunicorn.org/en/stable/settings.html#server-mechanics

更多關于Python相關內容可查看本站專題:《Python入門與進階經典教程》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python文件與目錄操作技巧匯總》

希望本文所述對大家Python程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东乡县| 游戏| 法库县| 沧源| 马边| 安徽省| 游戏| 潢川县| 泾源县| 象山县| 遵义县| 灌南县| 丰宁| 文化| 晋中市| 汾西县| 武川县| 桦川县| 张家界市| 桑植县| 蓬溪县| 余庆县| 化州市| 汝城县| 乌拉特后旗| 正宁县| 德阳市| 涡阳县| 赞皇县| 陆丰市| 饶河县| 潞西市| 五指山市| 奉节县| 葫芦岛市| 罗甸县| 靖江市| 于田县| 社会| 三河市| 鹰潭市|