[英]Creating and combining numerous images in Python - Error: Too many open files:
[英]“Too many open files” error when opening and loading images in 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()
我也遇到了這個問題,並用稍微不同的方法解決了這個問題。
此解決方法使用copy.deepcopy()
,它基於copy.deepcopy()
解決方案的類似邏輯,但避免創建temp
。 請參閱下面的代碼片段
import copy
KEEP=[]
for file in glob.glob("./KEEP/thing*.[tT][iI][fF]"):
m = pattern.search(file)
filename = m.group(1)
keep = copy.deepcopy(Image.open(file))
KEEP.append(keep)
KEEP_NAMES.append(filename)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.