python - Python - Plotly Dash 和 webbrowser 模块仅在调用一次时打开两个选项卡
问题描述
作为标题建议。我有一个文件main.py
:
import dashApp
from threading import Timer
import webbrowser
if __name__ == "__main__":
Timer(10, webbrowser.open_new("http://127.0.0.1:8050/")).start()
dashApp.dashApp()
我拥有的第二个文件(来自 Dash 文档的示例)是dashApp.py
:
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.express as px
import pandas as pd
def dashApp():
external_stylesheets = ["https://codepen.io/chriddyp/pen/bWLwgP.css"]
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
# assume you have a "long-form" data frame
# see https://plotly.com/python/px-arguments/ for more options
df = pd.DataFrame(
{
"Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"],
"Amount": [4, 1, 2, 2, 4, 5],
"City": ["SF", "SF", "SF", "Montreal", "Montreal", "Montreal"],
}
)
fig = px.bar(df, x="Fruit", y="Amount", color="City", barmode="group")
app.layout = html.Div(
children=[
html.H1(children="Hello Dash"),
html.Div(
children="""
Dash: A web application framework for Python.
"""
),
dcc.Graph(id="example-graph", figure=fig),
]
)
app.run_server(debug=True)
当我运行代码时,无论我尝试什么,它都会打开同一本地主机的两个选项卡。我认为这是一个时间问题,因此让 Dash 启动需要 10 秒的延迟。但它不管延迟打开两个选项卡。如果我只运行webbrowser
打开说 google.com 的代码,它只会打开一个。
就其dashApp
本身而言,我看不到任何打开浏览器的调用,事实上,如果我单独运行此代码,它根本不会打开浏览器。本地服务器刚刚启动是您所期望的。
我错过了什么?
解决方案
我认为问题在于您正在debug
模式下运行 Dash 应用程序:
app.run_server(debug=True)
所以改为运行:
app.run_server()
或明确debug
设置。False
当你打电话时,run_server
你运行Flask
与你的 Dash 应用程序关联的服务器(源)
它运行两次的原因是 Werkzeug 重新加载器处于活动状态,并且它产生了一个子进程来监视代码更改。如果您在应用程序运行时更改部分代码,您会注意到每次保存的更改都会打开另一个选项卡。有关更多信息,请参阅这篇文章。
所以
Timer(10, webbrowser.open_new("http://127.0.0.1:8050/")).start()
实际上正在运行多次。
或者,您可以保留debug=True
,但禁用重新加载器:
app.run_server(debug=True, use_reloader=False)
推荐阅读
- scala - 使用 salted_key 优化 spark-sql 连接
- django - Django 模型字段验证器:编码风格
- hybris - 在应用任何促销之前计算税款 - SAP Hybris
- google-apps-script - 当 Google 表格文档关闭时,可安装的时间驱动程序触发器会发生什么情况?
- angular - 在 ionic 4 中单击硬件后退按钮时关闭 ionic-datepicker
- python - 如何使两个同名音频的长度相等?
- c++ - 删除 C++ 中的尾随零
- chef-infra - 厨师没有创建日志文件
- javascript - 使用 if 条件然后在 nodejs 中抛出错误是一种好习惯吗?
- python-3.x - 为什么使用 Dash 创建的仪表板不起作用?