独角兽-如果客户端关闭连接会如何杀死工人?

时间:2018-11-12 18:59:52

标签: flask connection gunicorn broken-pipe

我有一个在gunicorn下运行的flask应用程序,该应用程序通过具有非常占用CPU的后端的REST api来处理客户端请求;一些请求需要几分钟的时间来响应。

但这会产生自己的问题。如果我说运行一个小的脚本来发出一个请求并终止它(ctrl-C或其他命令),那么即使没有人听到来自计算深度的请求并听到它的请求,flask应用仍然继续运行。破损的管道。

一旦客户端连接断开,是否有一种方法可以终止API调用(甚至只是杀死/重新启动工作程序)?感觉像Gunicorn可以处理的事情,但是我无能为力,无法找到任何可以解决问题的设置。

谢谢-这让我很烦!

1 个答案:

答案 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!

希望能给你一个答案!