关闭绘图服务器

时间:2020-05-15 13:39:54

标签: flask plotly-dash

这是此问题的后续内容: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命令的代码)?它应该分开吗?然后,当我需要关闭服务器时,需要采取哪些确切步骤?

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

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

链接的答案werkzeug.server.shutdown中的方法仅适用于开发服务器。创建具有分配的URL(“暴露端点”)的视图功能以实现此关闭功能是一件方便的事,当与gunicorn这样的WSGI服务器一起部署时,该功能将无效。

也许提出的问题多于答案:

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

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

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

答案 1 :(得分:0)

在两种情况下都有效的

app.run_server(debug=True)

app.run_server(debug=False)

代码中的任何地方是:

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

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