1. 程式人生 > >sanic官方文檔解析之Deploying(部署)和Extension(擴展)

sanic官方文檔解析之Deploying(部署)和Extension(擴展)

encrypt gre 執行 默認值 1.3 代碼 sock 連接 多核

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 (default 8000): Port to host the server on.
    • 默認的端口是8000
  • debug (default False): Enables debug output (slows server).
    • 調試模式(默認是False)可以輸出degug
  • ssl (default None): SSLContext for SSL encryption of worker(s).
    • 在ssl加密中(參數默認是空)
  • sock (default None): Socket for the server to accept connections from.
    • 接收連接數的socket是默認空
  • workers (default 1): Number of worker processes to spawn.
    • 運行程序的進程默認是1
  • loop (default None): An asyncio-compatible event loop. If none is specified, Sanic creates its own event loop.
    • 異步兼容的事件循環,如果沒有,sanic將會創建自己的時間循環
  • protocol (default HttpProtocol): 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(擴展)