作为标题建议。我有一个文件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()
我拥有的第二个文件(来自破折号中文档的示例)是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应用程序:因此,请改为运行:
或者显式地将
debug
设置为False
调用
run_server
时,运行与Dash应用程序(source)关联的Flask
服务器它运行两次的原因是Werkzeug重载程序处于活动状态,并且它生成一个子进程来监视代码更改。如果在应用程序运行时更改部分代码,您会注意到,对于每次保存的更改,都会打开另一个选项卡。有关更多信息,请参见this post
所以
实际上正在运行多次
或者,您可以保留
debug=True
,但禁用重新加载程序:相关问题 更多 >
编程相关推荐