关闭 plotly-dash 服务器

Shutting down a plotly-dash server

这是这个问题的后续问题:How to stop flask application without using ctrl-c。问题是我不理解接受的答案中的一些术语,因为我对此完全陌生。

import dash
import dash_core_components as dcc
import dash_html_components as html

app = dash.Dash()

app.layout = html.Div(children=[
    html.H1(children='Dash Tutorials'),
    dcc.Graph()
])

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

如何关闭它?我的最终目标是 运行 远程机器上的 plotly 仪表板,但我首先在我的本地机器上测试它。

我想我应该 "expose an endpoint"(不知道那是什么意思)通过:

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...'

我在哪里包含上面的代码?它是否应该包含在我展示的第一段代码中(即包含 app.run_server 命令的代码)?它应该是分开的吗?然后我需要采取哪些具体步骤来关闭服务器?

最后,无论我 运行 服务器在本地还是远程机器上,关闭服务器的步骤都一样吗?

非常感谢帮助!

链接答案werkzeug.server.shutdown中的方法仅适用于开发服务器。创建一个视图函数,并分配一个 URL ("exposing an endpoint") 来实现这个关闭函数是一件很方便的事情,当与 gunicorn 这样的 WSGI 服务器一起部署时,它不会起作用。

也许这产生的问题多于它回答的问题:

我建议您熟悉 Flask 的 wsgi-standalone deployment docs

然后 gunicorn deployment guide. The monitoring 部分可能有许多不同的服务监视器示例,您可以将其与 gunicorn 一起使用,允许您 运行 在后台运行应用程序,在重启时启动,等等.

最终,启动和停止 WSGI 服务器是服务监视器的责任,执行此操作的逻辑可能不应该编码到您的应用程序中。

的两种情况下什么都有效
app.run_server(debug=True)

app.run_server(debug=False)

代码中的任何地方是:

os.kill(os.getpid(), signal.SIGTERM)

(不要忘记导入 os 和信号) SIGTERM 应该会导致应用程序完全退出。