Gunicorn——如果客户端关闭连接,如何杀死一个工人?

vpu*_*utz 8 connection broken-pipe flask gunicorn

我有一个在 gunicorn 下运行的 Flask 应用程序,它通过 REST api 处理客户端请求,后端占用大量 CPU;有些请求需要几分钟才能响应。

但这会产生它自己的问题。比如说,如果我运行一个小脚本来发出一个请求并杀死它(ctrl-C 或其他任何东西),flask 应用程序会继续运行,尽管当它从计算深度返回并获取时没有人会听到它它的断管。

有没有办法在客户端连接中断后立即终止 API 调用(甚至只是杀死/重新启动工作程序)?这感觉就像 Gunicorn 可以处理的事情,但我无法找到任何可以解决问题的设置。

谢谢——这让我很烦恼!

小智 -1

可以使用以下代码杀死 Flask Worker:

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...'
Run Code Online (Sandbox Code Playgroud)

要杀死 Linux 上的 Gunicorn 服务器,您可以使用以下命令,我对此进行了测试:

pkill gunicorn
Run Code Online (Sandbox Code Playgroud)

该命令在各种 Linux 上都能完美运行,我假设您已经为服务器安装了 Linux

或者如果我给你一个Python实现:

import os

def shutdownGunicorn():
    os.system("pkill gunicorn")
Run Code Online (Sandbox Code Playgroud)

我不认为请求完成后杀死是明智的,因为那样你就无法知道何时会收到下一个请求。

Flask 在不工作时不会占用太多 CPU 和 RAM!

希望能给您答案!