(数据科学学习手札123)Python+Dash快速web应用开发——部署发布篇
1 简介
这是我的系列教程Python+Dash快速web应用开发的第二十期,在上一期中我介绍了利用内网穿透的方式,将任何可以联网的电脑作为“服务器”向外临时发布你的Dash应用。
而内网穿透作为一种临时展示的Dash应用发布方式,有着很多的局限性,尤其是在性能方面。而对于较为正式的Dash应用,自然是需要配合具有生产级别性能的web服务器进行发布,今天我就将介绍在windows和linux系统下,如何简单快速地发布你的Dash应用,适用于云服务器与局域网环境。
图1
2 利用waitress在windows中发布Dash应用
首先我们来介绍windows中快速发布Dash应用的方式,我们需要用到waitress,它是一个可以在windows和unix系统中运行的具有生产级别性能的WSGI服务器,因为Dash是基于Flask的,因此配合waitress发布非常之方便。
利用pip install waitress完成安装之后,我们主要有两种方式发布Dash应用:
- 方式一
第一种方式非常简单,是以命令行的方式进行发布,我们以项目结构篇中搭建的七普数据看板项目为例,在app.py的同级目录启动终端,执行下列命令:
waitress-serve --port=8888 app:app.server
我们就启动了url为本地ipv4地址:8888或公网ip地址:8888的Dash应用,其中本地ipv4地址你可以通过在终端执行ipconfig来查看:
图2
因此局域网内的任何设备都可以通过访问上述url来使用我们发布的Dash应用(譬如同一WIFI下的所有设备,同一内网下的所有宽带连接的设备):
图3
而如果你需要通过windows云服务器向外网发布Dash应用,类似的访问时把IP部分替换为公网IP即可。
- 方式二
waitress-server命令行的方式虽然简单,但是它只是一种简单需求下的快捷方式,实际上waitress设计了很多功能参数,以及配合PasteDeploy和logging等其他库来打印和记录日志等增广功能,这时候就需要使用到另一种方式。
推荐的方式是在app.py同级目录建立wsgi.py文件,然后在其中配置waitress服务的相关参数,譬如上文中命令行的等价方式是:
from waitress import serve
from app import app
serve(
app.server,
port=8888
)
接着终端执行python wsgi.py即可,而关于serve()的更多参数,以及如何打印或记录日志信息,可以参考官网文档https://docs.pylonsproject.org/projects/waitress/en/latest/arguments.html、https://docs.pylonsproject.org/projects/waitress/en/latest/logging.html。
3 利用gunicorn在linux中发布Dash应用
而当你的服务器为linux系统时,我们有更好的web服务器选择——gunicorn,它移植于Ruby的Unicorn项目,是一个兼具简单易用、轻量高效特点的非常流行的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的内容见官网https://docs.gunicorn.org/en/latest/index.html。
以上就是本文的全部内容,欢迎在评论区发表你的意见和想法。
(数据科学学习手札123)Python+Dash快速web应用开发——部署发布篇的更多相关文章
- (数据科学学习手札102)Python+Dash快速web应用开发——基础概念篇
本文示例代码与数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的新系列教程Python+Dash快 ...
- (数据科学学习手札108)Python+Dash快速web应用开发——静态部件篇(上)
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- (数据科学学习手札109)Python+Dash快速web应用开发——静态部件篇(中)
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- (数据科学学习手札115)Python+Dash快速web应用开发——交互表格篇(上)
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- (数据科学学习手札116)Python+Dash快速web应用开发——交互表格篇(中)
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- (数据科学学习手札117)Python+Dash快速web应用开发——交互表格篇(下)
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- (数据科学学习手札118)Python+Dash快速web应用开发——特殊部件篇
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- (数据科学学习手札103)Python+Dash快速web应用开发——页面布局篇
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- (数据科学学习手札105)Python+Dash快速web应用开发——回调交互篇(中)
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
随机推荐
- CountDownLatch与CyclicBarrier的基本使用
1 概述 CountDownLatch以及CyclicBarrier都是Java里面的同步工具之一,本文介绍了两者的基本原理以及基本使用方法. 2 CountDownLatch CountDownLa ...
- lvs 负载均衡 _DR模式 _Python脚本
import paramiko vip='192.168.83.6' # 虚拟IP # direct_server_information ds_info={ 'ip':'192.168.83.5', ...
- Java基础练习——读心术(扑克牌魔术——21张扑克牌)
Java基础练习--读心术(扑克牌魔术--21张扑克牌) 用到了Scanner,for循环,if-else语句,集合,线程的Thread.sleep()方法 话不多说,直接上代码!
- 【Spring】SpringIoC大致流程
目录 SpringIoC 是什么? 类图 大致过程 源码分析 SpringIoC 是什么? 官方文档的解释是:IoC也称为依赖注入(DI).在此过程中,对象仅通过构造函数参数,工厂方法的参数或在构 ...
- go 的方法集和接口断言
Go 的方法集与接口断言 方法集 引子 首先来看一段代码: package main import "fmt" func main() { var v IpmHelloByValu ...
- API文档大集合
[API文档大集合] sklearn API:http://sklearn.apachecn.org/cn/0.19.0/tutorial/index.html pandas API:http://p ...
- 1025 PAT Ranking
Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhe ...
- Intel汇编语言程序设计学习-第四章 数据传送、寻址和算术运算-下
4.3 和数据相关的操作符和伪指令 操作符和伪指令并非机器可执行的指令,相反,它们是由汇编器进行解释的.开发者可以使用一系列的MASM操作符或伪指令获取数据的地址以及大小等特征信息: OFFSET操 ...
- 前端基础问题:CSS居中的几种方式
水平居中 (1)内联元素: text-align: center; 利用 text-align: center :可以实现在块级元素内部的内联元素水平居中. 如果一行中有多个块级元素,可以通过设置块级 ...
- 【python】【补】Leetcode每日一题-合并两个有序数组
[python]Leetcode每日一题-合并两个有序数组 [题目描述] 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组 ...