我有一个在gunicorn下运行的flask应用程序,该应用程序通过具有非常占用CPU的后端的REST api来处理客户端请求;一些请求需要几分钟的时间来响应。
但这会产生自己的问题。如果我说运行一个小的脚本来发出一个请求并终止它(ctrl-C或其他命令),那么即使没有人听到来自计算深度的请求并听到它的请求,flask应用仍然继续运行。破损的管道。
一旦客户端连接断开,是否有一种方法可以终止API调用(甚至只是杀死/重新启动工作程序)?感觉像Gunicorn可以处理的事情,但是我无能为力,无法找到任何可以解决问题的设置。
谢谢-这让我很烦!
答案 0 :(得分:0)
可以使用以下代码杀死烧瓶工人:
from flask import request
def shutdown_server():
func = request.environ.get('werkzeug.server.shutdown')
if func is None:
raise RuntimeError('Werkzeug server doesn't run flask')
func()
@app.route('/shutdown', methods=['GET'])
def shutdown():
shutdown_server()
return 'Shutting down...'
要在 Linux 上杀死 Gunicorn 服务器,您可以使用我测试过的以下命令:
pkill gunicorn
这个命令在所有类型的 Linux 上都能完美运行,我假设你已经为服务器安装了这些
或者如果我给你一个 Python 实现:
import os
def shutdownGunicorn():
os.system("pkill gunicorn")
我不认为在请求完成后杀死是明智的,因为那样你不知道什么时候会收到下一个请求。
Flask 在不工作时不会占用太多 CPU 和 RAM!
希望能给你一个答案!