我有一个快速且肮脏的python脚本,该脚本将pdf作为输入并将页面保存为图像数组(使用pdf2image)。
我不明白的是:72张图像占用了920MB的内存。但是,如果我将图像保存到文件中然后重新加载,我的存储空间几乎只有30-40MB(图像的总大小为29MB)。那有意义吗?
我还尝试使用pickle来转储数组,在由于MemError而导致崩溃之前,我达到了大约3GB。我完全不知所措,正在吞噬这么多的内存...
答案 0 :(得分:1)
之所以会占用大量内存,很可能是由于元数据使用量过多,未压缩的图像数据(原始颜色数据)或库/工具本身中的无损图像编解码器所致。
这也可能取决于图像的大小,数量等。
最后一句话,关于泡菜。 Pickle本身是Python用来保留某些变量状态的内存转储格式。将内存转储到磁盘上的会话状态是一项繁重的任务。 Python不仅需要将所有内容转换为启用已保存状态的格式,而且还必须在保存数据后将所有数据复制到已知状态。这样做可能会消耗大量的内存和磁盘。 (只有这样,它才能通常对数据进行分块。)
回答一些评论后,一种解决方案是传递参数fmt=jpg
,该参数可使图像保持压缩状态,从而降低资源使用量。