如何在不使用 ctrl-c 的情况下停止烧瓶应用程序

新手上路,请多包涵

我想通过使用烧瓶脚本来实现一个可以停止烧瓶应用程序的命令。我已经搜索了一段时间的解决方案。因为该框架不提供 app.stop() API,所以我很好奇如何编写代码。我正在使用 Ubuntu 12.10 和 Python 2.7.3。

原文由 vic 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 401
2 个回答

如果您只是在桌面上运行服务器,您可以公开一个端点来终止服务器(在 关闭简单服务器 中阅读更多内容):

 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.get('/shutdown')
def shutdown():
    shutdown_server()
    return 'Server shutting down...'

这是另一种包含更多的方法:

 from multiprocessing import Process

server = Process(target=app.run)
server.start()
# ...
server.terminate()
server.join()

让我知道这是否有帮助。

原文由 Zorayr 发布,翻译遵循 CC BY-SA 4.0 许可协议

我使用线程做的略有不同

from werkzeug.serving import make_server

class ServerThread(threading.Thread):

    def __init__(self, app):
        threading.Thread.__init__(self)
        self.server = make_server('127.0.0.1', 5000, app)
        self.ctx = app.app_context()
        self.ctx.push()

    def run(self):
        log.info('starting server')
        self.server.serve_forever()

    def shutdown(self):
        self.server.shutdown()

def start_server():
    global server
    app = flask.Flask('myapp')
    # App routes defined here
    server = ServerThread(app)
    server.start()
    log.info('server started')

def stop_server():
    global server
    server.shutdown()

我用它来对 restful api 进行端到端测试,我可以在其中使用 python 请求库发送请求。

原文由 Ruben Decrop 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题