Plotly/Dash - Python 如何在一段时间后停止执行? [英] Plotly / Dash - Python how to stop execution after time?

查看:64
本文介绍了Plotly/Dash - Python 如何在一段时间后停止执行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在一定时间后停止执行我的 Dash 程序(当我关闭浏览器窗口时效果更好,尽管我怀疑这是可能的).有没有办法通过python中断它?

I want to stop my Dash Program from executing after a certain amount of time (even better when I close the browser window, though I doubt that's possible). Is there a way to interrupt it through python?

我已经试过了

sys.exit() 

在调用 app.run_server 之后.据我所知很艰难

after calling app.run_server. Tough as far as I understand

app.run_server

处于无限循环中,因此我永远不会到达 sys.exit()

is on an infinte loop, thus I'm never reaching sys.exit()

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

推荐答案

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

Since plotly uses flask for the server. So you code sys.exit("Bye!") is actually never reached, hence your server is never stopped. So there are 2 ways to stop your server,

  • Ctrl + c 我假设你现在会这样做

  • Ctrl + c which I assume you would be doing now

现在你也可以用代码来做,所以如果你真的需要在一段时间后停止代码,你应该停止烧瓶服务器.要停止 Flask 服务器,您需要创建一个路由.因此,每当您点击该网址时,服务器就会停止.

Now you can do it using code too, so if you really need to stop the code after some time you should stop the flask server. To stop flask server you need to create a route. So whenever you hit that url the server would stop.

以下是针对 Flask 的代码,您需要将其转换为等效的 plotly 代码:

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()

现在你可以通过调用这个函数来关闭服务器:

Now you can shutdown the server by calling this function:

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

更新:对于 plotly,您可以按以下方式编写代码.

Update: For plotly you can write the code in the following way.

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)

这篇关于Plotly/Dash - Python 如何在一段时间后停止执行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆