Gunicorn + Flask 流视频时关键工作人员超时

问题描述 投票:0回答:0

我有一个设置,可以使用在 Gunicorn 下运行的 Flask 将视频从网络摄像头流式传输到网络界面。它运行良好 30 秒,然后 Gunicorn 抛出一个工作超时错误。 Gunicorn 使用以下命令启动。

gunicorn3 --bind 0.0.0.0:5001 wsgi_cameras:app

为了确认是 Gunicorn 使工作进程超时并杀死了它,我们使用以下命令启动它:

gunicorn3 --bind 0.0.0.0:5001 --timeout 42 wsgi_cameras:app

使用此命令运行时,工作线程会在 42 秒后超时。

def rear_frames():
    while True:
        success, frame = rear.read()
        if not success:
            error_msg = cv2.imread(CAMERA_FAILED_IMG, cv2.IMREAD_UNCHANGED)
            ret, buffer = cv2.imencode('.jpg', error_msg)
            data = buffer.tobytes()
            yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + data + b'\r\n')
            break
        else:
            # Resize to standard width and height.
            frame = cv2.resize(frame, (FRAME_WIDTH, FRAME_HEIGHT))
            # Convert data to bytes and yield result.
            ret, buffer = cv2.imencode('.jpg', frame)
            data = buffer.tobytes()
            yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + data + b'\r\n')

@app.route('/rear_feed')
def rear_feed():
    return Response(rear_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')

rear_frames()
被定义为发送多部分图像以流式传输视频的生成器,该生成器不应阻止工作人员发送其心跳。成功的视频流证明了该工作人员始终保持活力。

为什么这个设置会导致worker不发送心跳,最终被master杀死?

是否有替代方案可以代表 Flask 应用程序内的工作人员发送心跳?

python flask video-streaming gunicorn
© www.soinside.com 2019 - 2024. All rights reserved.