gpt4 book ai didi

python - 如何从内存中删除流?

转载 作者:太空宇宙 更新时间:2023-11-03 17:17:52 25 4
gpt4 key购买 nike

我有一个使用 Picamera 的运动检测脚本图书馆。我用PicameraCircularIO流对象,继承自 CircularIO类(仍然是 Picamera 库中的类),它继承自 native Python BytesIO类。

问题在于,当记录到循环流中,然后将流的内容写入磁盘时,内存不会被清除。

将流写入磁盘后,这就是我所做的:

stream.seek(0)
stream.truncate()

我也尝试过调用stream.flush()和/或关闭流:stream.close(),但没有帮助。

我还尝试删除对流的所有引用,以便对其进行垃圾收集(尽管这样做没有任何意义,因为将流截断为大小 0 通常应该完成这项工作...)。流位于数组中,因此我执行了 del Streams[index]。它不起作用,所以我也尝试手动调用垃圾收集器:gc.collect(),但没有效果。

内存中仅计算流中写入的字节数,而不计算流的大小。例如,如果将 2125000 字节写入流中,然后我截断它,那么内存中仍将有 2125000 字节。

任何提示/技巧/答案都值得赞赏。

干杯!

最佳答案

gc.collect 将内存标记为未使用。由于您的程序需要更多内存,因此应该重用该内存。但是,它可能不会将该内存释放回操作系统,因此操作系统将继续报告已使用的内存。一般来说,Python 进程倾向于保留其内存而不将其释放回来,因此它们的总内存占用量将代表其内存使用量的“高水位线”。

就您而言,这应该没问题,因为您正在释放流。如果您开始使用另一个流,它应该重用相同的空间,并且您的“顶部”报告不应显示大小增加。

参见Releasing memory in Python以获得更详细的解释。

关于python - 如何从内存中删除流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33469354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com