【发布时间】:2018-10-16 12:43:29
【问题描述】:
我有一个快速而肮脏的 python 脚本,它以 pdf 作为输入并将页面保存为图像数组(使用 pdf2image)。
我不明白的是:72 张图片占用 920MB 内存。但是,如果我将图像保存到文件中然后重新加载它们,我会得到几乎超过 30-40MB(图像的组合大小为 29MB)。那有意义吗?
我还尝试使用 pickle 转储数组,在由于 MemError 崩溃之前我达到了大约 3GB。我完全不知道是什么消耗了这么多内存......
【问题讨论】:
-
该工具最有可能在解码时将元数据存储在内存中。例如未压缩的颜色映射(请记住,PNG 和 JPG 是压缩的,但原始数据会占用更多空间)。因此,取决于图像的大小以及它们具有的颜色数量等,是的。听起来有共鸣。 pickle 模块(不确切知道内部工作原理)很可能会复制您的所有值,必须将它们打包到它熟悉的结构中,这很容易使内存使用量翻倍。可悲的是,在那里工作的唯一方法是将其分块。
-
这是我的怀疑。如何释放元数据?不知何故必须有一种方法可以手动清理它(垃圾收集模块不起作用)
-
您必须提交错误报告、功能请求或创建修复此库问题的补丁。我最好的猜测是你现在不能。我以前使用过这个库,但从来没有遇到过问题,因为我从来没有真正处理过包含许多/大图像的大型 PDF。
-
好的,我找到了罪魁祸首:该模块将 pdf 转换为 ppm 图像,这些图像非常巨大。我必须找到一种方法将 PPM 转换为 png 或 jpg 之类的东西,这应该可以解决问题......
-
你试过
fmt=jpg作为参数吗?