Я хочу остановить выполнение моей программы 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!")
Так как plotly
использует flask
для сервера. Таким образом, ваш код sys.exit("Bye!")
на самом деле никогда не достигается, поэтому ваш сервер никогда не останавливается.
Итак, есть 2 способа остановить ваш сервер,
Ctrl + c, что, как я предполагаю, вы будете делать сейчас
Теперь вы также можете сделать это с помощью кода, поэтому, если вам действительно нужно остановить код через некоторое время, вы должны остановить сервер flask. Чтобы остановить фляжный сервер, вам нужно создать маршрут. Поэтому всякий раз, когда вы нажимаете этот URL-адрес, сервер останавливается.
Ниже приведен код для 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...'
Обновлять: Для сюжета вы можете написать код следующим образом.
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)
Извините, я дал вам синтаксис для фляги. Вам нужно преобразовать код в сюжетный тире.plot.ly/urls
Спасибо за обновление, я использовал что-то подобное, но теперь у меня есть кнопка отмены и стрелка обновления на моей странице, знаете почему?
@wieli99 Не уверен. Но я думаю, что ваша первая проблема теперь решена. вы можете закрыть приложение.
Для будущих читателей: добавьте ._dash-undo-redo { display: none; } в ваш внешний css, чтобы исправить это
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
Спасибо за быстрый ответ, однако я получаю следующую ошибку AttributeError: объект «Dash» не имеет атрибута «маршрут».