我正在向 gevent 工作人员提供来自 gunicorn 的 MJPEG 流响应。一切正常,但是当客户端终止连接时,似乎 zeromq 订阅者没有被 GC 处理,只是继续接受图像数据。
这是 gunicorn 的内存使用情况:
这是 wsgi 应用程序的源代码:
from gevent_zeromq import zmq
context = zmq.Context()
def app(environ, start_response):
if environ['PATH_INFO'] == '/':
subscriber = context.socket(zmq.SUB)
subscriber.connect("ipc:///tmp/camera")
subscriber.setsockopt(zmq.SUBSCRIBE, "")
boundary = "--ipcamera"
status = '200 OK'
headers = [('Content-type', 'multipart/x-mixed-replace;boundary={}'.format(boundary))]
start_response(status, headers)
def get_frames():
while True:
yield subscriber.recv()
return get_frames()
status = '404 NOT FOUND'
headers = []
start_response(status, headers)
return status
我正在使用 --max-requests 5 运行 gunicorn 来提供帮助,但显然不是解决方案。我什至不知道从哪里开始追捕罪魁祸首:/