【问题标题】:Shutting down a plotly-dash server关闭 plotly-dash 服务器
【发布时间】:2020-05-15 13:39:54
【问题描述】:

这是这个问题的后续: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)

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

我想我应该通过以下方式“暴露一个端点”(不知道这意味着什么):

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 命令的代码)?应该是分开的吗?然后我需要采取哪些具体步骤才能在需要时关闭服务器?

最后,无论我在本地还是远程机器上运行服务器,关闭服务器的步骤是否相同?

非常感谢帮助!

【问题讨论】:

  • 远程机器上运行哪个操作系统?
  • 远程机器运行Linux的一些变种,但我恐怕不知道具体。 /etc 中有一个 yum.conf 文件,如果有帮助的话。至于本地机器,是MacOS

标签: flask plotly-dash


【解决方案1】:

链接答案中的方法werkzeug.server.shutdown 仅适用于开发服务器。创建一个视图函数,用一个分配的 URL(“暴露一个端点”)来实现这个关闭函数是一件很方便的事情,当部署一个像 gunicorn 这样的 WSGI 服务器时,这将不起作用。

也许这会产生比回答更多的问题:

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

然后可能是gunicorn deployment guidemonitoring 部分有许多不同的服务监视器示例,您可以将它们与 gunicorn 一起使用,允许您在后台运行应用程序、在重新启动时启动等。

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

【讨论】:

    【解决方案2】:

    在这两种情况下都有什么作用

    app.run_server(debug=True)
    

    app.run_server(debug=False)
    

    代码中的任何地方都是:

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

    (别忘了导入操作系统和信号) SIGTERM 应该导致应用程序干净退出。

    【讨论】:

    • 我已经发布了这个解决方案,以防有人指出为什么不这样做以优雅地终止应用程序......
    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2020-08-22
    • 1970-01-01
    • 2017-12-11
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多