sanic官方文檔解析之Deploying(部署)和Extension(擴展)
1,Deploying(部署)
通過內置的websocket可以很簡單的部署sanic項目,之後通過實例sanic.Sanic,我們可以運行run這個方法通過接下來的關鍵字參數
host
(default"127.0.0.1"
): Address to host the server on.- 默認的主機ip是127.0.0.1
port
(default8000
): Port to host the server on.- 默認的端口是8000
debug
(defaultFalse
): Enables debug output (slows server).- 調試模式(默認是False)可以輸出degug
ssl
(defaultNone
):SSLContext
for SSL encryption of worker(s).- 在ssl加密中(參數默認是空)
sock
(defaultNone
): Socket for the server to accept connections from.- 接收連接數的socket是默認空
workers
(default1
): Number of worker processes to spawn.- 運行程序的進程默認是1
loop
(defaultNone
): Anasyncio
-compatible event loop. If none is specified, Sanic creates its own event loop.- 異步兼容的事件循環,如果沒有,sanic將會創建自己的時間循環
protocol
(defaultHttpProtocol
): Subclass of asyncio.protocol.- 異步協議默認是HTTPProtocol協議
1.1workers
通過默認值,Sanic僅僅使用一核CPU來監聽主程序的進程,為了壓榨出果汁,恰好一定特殊數量的工人用run參數
app.run(host="127.0.0.1", port=8000, workers=4)
Sanic能夠自動的多線程旋轉上升,且在他們之間有路由指示,我們推薦盡可能多核的運行
1.2,運行via命令
如果你喜歡使用命令模式參數,你可以啟動Sanic服務端執行模塊,,如果你初始化一個Sanic為一個app對象在一個文件中,你可以運行這個服務文件執行以下代碼:
python -m sanic server.app --host=0.0.0.0 --port=1337 --workers=4
通過這樣的方式運行sanic,也不是引用app.run在Python中不是必須的,如果存在,確定要包起來,當解釋器跳轉執行的時候,它會被執行
if __name__ == ‘__main__‘:
app.run(host="0.0.0.0",port=1337, workers=4)
1.3,運行via Gunicorn
Gunicon‘Green Unicorn‘ 是一個為UNIX服務的WSGI HTTP, 它是一個pre-fork 工作模塊的端口,是從Ruby的Unicorn項目中來.
為了運行sanic應用,你需要從Gunicon的worker-class參數中使用特殊的sanic.worker.GunicornWorker
gunicorn myapp:app --bind 0.0.0.0:1337
--worker-class sanic.worker.GunicornWorker
如果您需要與其他應用程序(尤其是循環)共享SANIC過程,那麽這是合適的。但是,請註意,此方法不支持使用多個進程,並且通常不是運行應用程序的首選方法
更多信息,查看Gunicorn 文檔
1.4,禁止調試的日誌
要提高性能,請在運行參數中添加debug=false和access_log=false
app.run(host=‘0.0.0.0‘, port=1337, workers=4, debug=False, access_log=False)
通過gunicorn運行,您可以設置環境變量sanic_access_log=“false”
env SANIC_ACCESS_LOG="False" gunicorn myapp:app --bind 0.0.0.0:1337
--worker-class sanic.worker.GunicornWorker --log-level warning
你也可以直接重寫配置文件
app.config.ACCESS_LOG = False
1.5,支持異步
如果您需要與其他應用程序(尤其是循環)共享SANIC過程,那麽這是合適的。但是,請註意,此方法不支持使用多個進程,並且通常不是運行應用程序的首選方法。
以下是一個不完整的示例(請參閱示例中的run_async.py了解更實用的內容)
server = app.create_server(host="0.0.0.0", port=8000)
loop = asyncio.get_event_loop()
task = asyncio.ensure_future(server)
loop.run_forever()
sanic官方文檔解析之Deploying(部署)和Extension(擴展)