Plotly / Dash-Python时间后如何停止执行?

时间:2019-04-10 20:13:15

标签: python python-3.x plotly plotly-dash

我想在一定时间后停止执行Dash程序(关闭浏览器窗口甚至会更好,尽管我怀疑这样做是否可行)。有没有办法通过python中断它?

我已经尝试过放一个

sys.exit() 

在调用app.run_server之后。据我了解,坚强

app.run_server

处于无限循环中,因此我从未到达sys.exit()

if __name__ == '__main__':
    app.title = 'foo'
    app.run_server(debug=False)
    sys.exit("Bye!")

2 个答案:

答案 0 :(得分:0)

由于plotly使用flask作为服务器。因此,实际上从未到达您的代码sys.exit("Bye!"),因此您的服务器永远不会停止。 因此,有两种方法可以停止服务器,

  • Ctrl + c,我想您现在要这样做

  • 现在您也可以使用代码来完成它,因此,如果您确实需要在一段时间后停止代码,则应该停止flask服务器。要停止Flask服务器,您需要创建一条路由。因此,只要您点击该网址,服务器就会停止。

以下是用于Flask的代码,您需要将其转换为等效的可绘制代码:

from flask import request

def shutdown_server():
    func = request.environ.get('werkzeug.server.shutdown')
    if func is None:
        raise RuntimeError('Not running with the Werkzeug Server')
    func()

现在您可以通过调用以下函数来关闭服务器:

@app.route('/shutdown', methods=['POST'])
def shutdown():
    shutdown_server()
    return 'Server shutting down...'

更新: 对于plotly,您可以通过以下方式编写代码。

import dash
import dash_core_components as dcc
import dash_html_components as html
from flask import request

print(dcc.__version__) # 0.6.0 or above is required

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div([
    # represents the URL bar, doesn't render anything
    dcc.Location(id='url', refresh=False),

    dcc.Link('Navigate to "/"', href='/'),
    html.Br(),
    dcc.Link('Navigate to "/page-2"', href='/page-2'),

    # content will be rendered in this element
    html.Div(id='page-content')
])

def shutdown():
    func = request.environ.get('werkzeug.server.shutdown')
    if func is None:
        raise RuntimeError('Not running with the Werkzeug Server')
    func()

@app.callback(dash.dependencies.Output('page-content', 'children'),
              [dash.dependencies.Input('url', 'pathname')])
def display_page(pathname):
    if pathname =='/shutdown':
        shutdown()
    return html.Div([
        html.H3('You are on page {}'.format(pathname))
    ])


if __name__ == '__main__':
    app.run_server(debug=True)

答案 1 :(得分:-1)

def button():
        button_reply = QMessageBox.question(MainWindow, "Bank Management System", "Deposited Successfully", QMessageBox.Ok)
        if button_reply == QMessageBox.Ok:
            Deposit()//execute deposite function first
            threading.Timer(5.0,clearData).start()// clrarData function will execute after 5 seconds