python读取视频占用内存太大_视频流用多进程读写,内存溢出怎么办?

本文介绍了使用Python处理视频时,因读取视频占用内存过大导致的问题及其解决方案。通过引入多进程,分别进行视频读取和显示,并利用`multiprocessing.Manager()`的列表作为共享缓冲栈,当缓冲栈达到一定容量时清空,同时借助`gc.collect()`手动清理内存,有效避免了内存溢出。示例代码中展示了具体的实现过程。
摘要由CSDN通过智能技术生成

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

import gc

import os

from multiprocessing import Manager, Process

import cv2

video_address = r"F:\video\obama.mp4" # 这里原为海康威视RTSP地址,不过普通视频文件也存在溢出

# 向共享缓冲栈中写入数据:

def write(stack, cam, top: int) -> None:

print('Process to write: %s' % os.getpid())

cap = cv2.VideoCapture(cam)

while True:

success, img = cap.read()

if success:

stack.append(img)

# 每到一定容量清空一次缓冲栈

# 利用gc库,手动清理内存垃圾,防止内存溢出

print(len(stack))

if len(stack) >= top:

del stack[:]

gc.collect()

# 在缓冲栈中读取数据:

def read(stack) -> None: #提醒返回值是一个None

print('Process to read: %s' % os.getpid())

print("开始逐帧读取")

while True:

if len(stack) >= 10:

frame = stack.pop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值