При выполнении следующего кода:«Слишком много открытых файлов» ошибка при открытии и загрузка изображений в подушку
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'
Я не понимаю, почему это происходит, поскольку я загружаю(), а затем закрываю() все файлы, почему они должны оставаться открытыми? Есть ли решение этой проблемы, кроме сокращения количества файлов (что для меня не является вариантом)? Какой-то способ закрыть их после того, как их содержимое было прочитано в памяти?
Невозможно воспроизвести с помощью Python 3 и последней подушки. @yannis, попробуйте запустить этот скрипт http://pastebin.com/tP6E3UXE - воспроизводится ли проблема? – alexanderlukanin13
'keep.close()' должно быть совершенно ненужным, так как 'keep.load()' [должен загружать данные файла и затем отбрасывать объект файла в фоновом режиме] (http://pillow.readthedocs.org/en/ последняя/ссылка/Image.html # PIL.Image.Image.close). Может быть, это имеет некоторый побочный эффект? Я все еще работаю над воспроизведением ошибки, но попытаюсь просто удалить закрытие и посмотреть, поможет ли это. – KobeJohn
Также не может воспроизводить 4000 изображений в Python 2.7.8 или 3.4.1 и PILLOW 2.7.0. Вы уверены, что это настоящий код, который умирает? Интересно, может быть, вы сами открываете файл, предоставляя объект файла (а не путь) PIL, а затем случайно закрывая * Image * вместо * FIle Object * ...? Я на самом деле пробовал это, но пока еще не смог достигнуть предела открытого файла. – KobeJohn