(數據科學學習手札123)Python+Dash快速web應用開發——部署發布篇

1 簡介

   這是我的系列教程Python+Dash快速web應用開發的第二十期,在上一期中我介紹了利用內網穿透的方式,將任何可以聯網的電腦作為「伺服器」向外臨時發布你的Dash應用。

  而內網穿透作為一種臨時展示的Dash應用發布方式,有著很多的局限性,尤其是在性能方面。而對於較為正式的Dash應用,自然是需要配合具有生產級別性能的web伺服器進行發布,今天我就將介紹在windowslinux系統下,如何簡單快速地發布你的Dash應用,適用於雲伺服器與區域網環境。

圖1

2 利用waitress在windows中發布Dash應用

  首先我們來介紹windows中快速發布Dash應用的方式,我們需要用到waitress,它是一個可以在windowsunix系統中運行的具有生產級別性能的WSGI伺服器,因為Dash是基於Flask的,因此配合waitress發布非常之方便。

  利用pip install waitress完成安裝之後,我們主要有兩種方式發布Dash應用:

  • 方式一

  第一種方式非常簡單,是以命令行的方式進行發布,我們以項目結構篇中搭建的七普數據看板項目為例,在app.py的同級目錄啟動終端,執行下列命令:

waitress-serve --port=8888 app:app.server

  我們就啟動了url為本地ipv4地址:8888公網ip地址:8888Dash應用,其中本地ipv4地址你可以通過在終端執行ipconfig來查看:

圖2

  因此區域網內的任何設備都可以通過訪問上述url來使用我們發布的Dash應用(譬如同一WIFI下的所有設備,同一內網下的所有寬頻連接的設備):

圖3

  而如果你需要通過windows雲伺服器向外網發布Dash應用,類似的訪問時把IP部分替換為公網IP即可。

  • 方式二

  waitress-server命令行的方式雖然簡單,但是它只是一種簡單需求下的快捷方式,實際上waitress設計了很多功能參數,以及配合PasteDeploylogging等其他庫來列印和記錄日誌等增廣功能,這時候就需要使用到另一種方式。

  推薦的方式是在app.py同級目錄建立wsgi.py文件,然後在其中配置waitress服務的相關參數,譬如上文中命令行的等價方式是:

from waitress import serve
from app import app

serve(
    app.server,
    port=8888
)

  接著終端執行python wsgi.py即可,而關於serve()的更多參數,以及如何列印或記錄日誌資訊,可以參考官網文檔//docs.pylonsproject.org/projects/waitress/en/latest/arguments.html//docs.pylonsproject.org/projects/waitress/en/latest/logging.html

3 利用gunicorn在linux中發布Dash應用

  而當你的伺服器為linux系統時,我們有更好的web伺服器選擇——gunicorn,它移植於RubyUnicorn項目,是一個兼具簡單易用、輕量高效特點的非常流行的WSGI伺服器,但只能運行於Unix系統中,因此前面介紹windows系統部署方法就沒有提到它。

  用gunicorn來發布Dash應用也是非常簡單高效,比如dash-bootstrap-components的官網文檔就使用它進行發布的。

  類似的,利用pip install gunicorn完成安裝之後,只需要一行命令我們就可以架起Dash應用, 與上文waitress略有不同的是,我們需要在app.py中對server.py中的server對象進行導入,接著再執行下列gunicorn命令:

gunicorn -w 4 -b 0.0.0.0:8888 app:server

  就成功地在linux伺服器上發布了Dash應用,同樣可以通過公網和區域網IP進行訪問,其中-w參數用於指定開啟指定數量的進程來提高應用的並發性能。

圖4

  配合nohup我們可以輕鬆地將gunicorn命令置於後台執行,不會阻塞終端,如:

nohup gunicorn -w 4 -b 0.0.0.0:8888 app:server &

  而如果想要關閉後台運行在某個埠號下的所有gunicorn進程,執行kill $(lsof -i:埠號|awk '{if(NR==2)print $2}')命令即可一步到位。

  同樣地gunicorn也擁有很多功能參數,常用的有--access-logfile來指定向外書寫日誌文件,-t用於設定請求的超時秒數閾值,默認為30秒,當你的Dash應用某個回調執行的計算時間很長時,請務必記住手動設置提升該參數的數值。

  更多有關gunicorn的內容見官網//docs.gunicorn.org/en/latest/index.html


  以上就是本文的全部內容,歡迎在評論區發表你的意見和想法。

Tags: