提问者:小点点

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


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


共3个答案

匿名用户

如果您只是在桌面上运行服务器,则可以公开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.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()

让我知道这是否有帮助。

匿名用户

我用线程做的略有不同

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 请求库发送请求。

匿名用户

这是一个有点旧的线程,但是如果有人尝试、学习或测试基本烧瓶应用程序,从后台运行的脚本开始,停止它的最快方法是杀死运行应用程序的端口上运行的进程。注意:我知道作者正在寻找一种不杀死或停止应用程序的方法。但这可能会帮助正在学习的人。

sudo netstat -tulnp | grep :5001

你会得到这样的东西。

tcp 0 0 0.0.0.0:5001 0.0.0.0:*LISTEN 28834/python

若要停止应用程序,请终止该进程

sudo kill 28834