当运行以下代码时:
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
方法-参见枕头问题 #1144 https://github.com/python-pillow/Pillow/issues/1144。我也遇到了同样的情况too many open files
错误 - 请参阅#1237 https://github.com/python-pillow/Pillow/issues/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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)