python - 在 Pillow 中打开和加载图像时出现 "Too many open files"错误

标签 python pillow

运行以下代码时:

KEEP=[]
for file in glob.glob("./KEEP/thing*.[tT][iI][fF]"):
    m = pattern.search(file)
    filename=m.group(1)
    keep=Image.open(file)
    keep.load()
    KEEP.append(keep)
    KEEP_NAMES.append(filename)
    keep.close()

超过一千个文件,我收到错误信息:

Traceback (most recent call last):
  File "/hom/yannis/texmf/python/remove-harakat.py", line 123, in <module>
  File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 2237, in open
IOError: [Errno 24] Too many open files: './KEEP/thing1118_26.TIF'

我不明白为什么会这样,因为我正在加载()然后关闭()所有文件,为什么它们应该保持打开状态? 除了减少文件数量(这对我来说不是一个选项)之外,是否有解决此问题的方法?在内存中读取内容后,有什么方法可以关闭它们?

最佳答案

这可能是 Image.load 方法的错误 - 参见 Pillow issue #1144 .我遇到了同样的 too many open files 错误 - 请参阅 #1237 .

我的解决方法是将图像加载到一个临时对象中,制作一个副本,然后明确关闭该临时对象。对于您的代码,它看起来像这样:

KEEP=[]
for file in glob.glob("./KEEP/thing*.[tT][iI][fF]"):
    m = pattern.search(file)
    filename = m.group(1)
    temp = Image.open(file)
    keep = temp.copy()
    KEEP.append(keep)
    KEEP_NAMES.append(filename)
    temp.close()

关于python - 在 Pillow 中打开和加载图像时出现 "Too many open files"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29234413/

相关文章:

python - 如果我将实体两次放入 Google App Engine 数据存储区会怎样?

python - 任务之间保存的 dask-worker 内存

python 向特定行插入一行(大文件)

python-3.x - py2app 类型错误 : dyld_find() got an unexpected keyword argument 'loader'

python - 如何使用 linux python 下载大型 azure blobls

Python 2.7 xpath?

python - 使用 Pillow (PIL) 在 Python 中生成图像

python - 如何从位图图像的 RGB 值中获取数组?

pygame - 带 Pillow 的 Python 3.3 - 导入错误 : No module named 'Image'

python - 扩展图像 (PIL/Pillow)