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