(数据科学学习手札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 ...
随机推荐
- Spring学习笔记(六):MyBatis集成
1 概述 MyBaits是一个著名的持久层框架,本文首先介绍了MyBatis的简单使用,接着与Spring进行整合,最后简单地使用了Generator去自动生成代码. 2 MyBatis简介 MyBa ...
- Java基础练习——读心术(扑克牌魔术——21张扑克牌)
Java基础练习--读心术(扑克牌魔术--21张扑克牌) 用到了Scanner,for循环,if-else语句,集合,线程的Thread.sleep()方法 话不多说,直接上代码!
- 通读《构建之法》与CI/CD工具尝试
项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 作业要求 我在这个课程的目标是 积累软件开发经验,提高工程能力 这个作业在哪个具体方面帮助我实现目标 通读课 ...
- 测试工具PerfDog的使用
使用操作:https://www.jianshu.com/p/cc04c710e643下载地址:https://perfdog.qq.com/
- spring boot 项目从配置文件中读取maven 的pom.xml 文件标签的内容。
需求: 将pom.xml 文件中的版本号读取到配置文件并打印到日志中. 第一步: 在pom.xml 中添加以下标签. 第二步: 将version 标签的值读取到配置文件中 这里使用 @@ 而不是 ...
- POJ2570 二进制,位运算,Floyd
题意: 给你一个有向图,两点之间有多种连接方式,然后每次询问都问你点A,B之间有哪些方式可以到达,每个小字母是一个方式. 思路: 很巧妙的位运算和Floyd应用,借助Floyd ...
- 在Android so文件的.init、.init_array上和JNI_OnLoad处下断点
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/54233552 移动端Android安全的发展,催生了各种Android加固的诞生, ...
- SQL Server 数据库基本使用技巧
use master; #显示数据库 select top 3 * from spt_values; #显示去前3行 select * from test where id2 like '%1010% ...
- java之try catch finally
try{ }catch(Exception e){ }finally{ } java异常处理在编程中很常见,将可能抛出异常的语句放在try{}中,若有异常抛出,则try{}中抛出异常语句之后的语句不再 ...
- PHP 判断当前日期是否是法定节假日或者休息日
1.代码如下 $date = date("Ymd",time()); $url = "http://api.goseek.cn/Tools/holiday?date=&q ...