停止Flask(没有请求上下文)

时间:2017-05-28 20:42:28

标签: python python-3.x flask werkzeug

唯一的officially documented way of stopping Flask from within the application只能通过请求上下文来完成:

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

这导致了非常丑陋和hacky场景,如果你想让它从进程的另一部分关闭,你几乎必须编写从服务器到自身的请求脚本(即:not not响应请求并且您没有请求上下文)。这也将杀戮终点暴露给整个网络(即使它不重要/非刺激,如果没有必要仍然是愚蠢的。)

在没有请求上下文的情况下,是否有一种清除Flask的方法,即:神话app.stop()

有关更多背景信息,并且没有深入了解让我在线程中运行Flask的深奥理由(对我的程序有意义,我保证):

class WebServer:
    def __init__(self):
        self.app = Flask('test')
        self.thread = threading.Thread(target=self.app.run)

        @self.app.route('/')
        def index():
            return 'Hello World'

    def start(self):
        self.thread.start()

    def stop(self):
        # how can I implement this? just getting Flask to end would end the thread!

0 个答案:

没有答案