PIL抛出No space left on device和Too many open files

使用Python PIL Image.open读取大量图片时候,遇到“OSError: [Errno 28] No space left on device”等问题,总结下问题:

1、“Too many open files”问题

原因:PIL的Image.open操作是lazy operation(类似Spark的tranform操作,即只是保存操作流程,需要调用action操作后才真正执行),即执行open之后,实际图片并未加载到内存;这时如果使用list推导表达式,那么后续在真正执行时候会同时打开大量图片,抛出Too many open files错误。

解决方案:在读取文件时候,主动调用action操作,将open后的对象copy到新对象,实现顺序读取、创建图片。

lst = []

for i in range(100000):

    img=Image.open("***")

    lst.append(img.copy())

     img.close()

2、使用shufil.copy时候,运行中抛出OSError: [Errno 28] No space left on device

原因:使用和df -h和df -ih查看,发现瓷盘空间有剩余,但inodes已满,导致新文件的元数据无法存储。

解决方法:for i in /*; do echo $i; find $i | wc -l; done,查看各个目录下的文件数目,清楚文件,降低inodes的比例。

 

3、补充inodes的知识:

(1)文件在硬盘上存储时,最小存储单位Wie”扇区”(Sector),每个扇区储存512字节(相当于0.5KB)。OS读取硬盘为一次性连续读取多个扇区(多个扇区称为”块”(block),块是文件存取的最小单位,最常见是4KB,即连续八个 sector组成一个 block。。

(2)但是OS读取文件并不知道文件存储在哪里,通过通过文件的元数据才能知道,所以文件元数据也需要存储。每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

(3)文件元数据信息:文件的创建者、文件的创建日期、文件的大小等等。

(4)inode(索引节点):文件元数据存储的区域

 

更多学习笔记可以关注我的微信公众号「kelly学挖掘」,欢迎交流。

-- over --

引用\[1\]:OSError: \[Errno 24\] Too many open files错误是指在程序运行过程中打开的文件数量超过了系统所允许的最大限制。这个错误通常发生在处理大量文件的程序中。引用\[2\]:根据错误信息,可以看出是在保存图片时出现了问题。具体来说,是在使用PIL库的save方法保存图片时,出现了OSError: \[Errno 24\] Too many open files错误。引用\[3\]:根据用户提供的引用内容,可以看出用户遇到了OSError: \[Errno 24\] Too many open files错误,并且已经尝试了一些解决办法,但没有成功。用户还怀疑这个错误与supervisord的配置有关。根据用户的描述,问题可能是由于系统打开文件数量的限制导致的。解决这个问题的方法是修改系统的open files句柄的限制。用户可以使用ulimit -a命令查看系统的open files句柄的限制,并根据需要修改最大限制。另外,用户还提到了supervisord的配置文件中的minfds参数,这个参数用于设置supervisord启动时可用的文件描述符的最小数量。用户可以根据需要修改这个参数的值,并重启supervisord来解决问题。 #### 引用[.reference_title] - *1* [出现OSError: [Errno 24] Too many open files错误解决方法。](https://blog.csdn.net/weixin_46779338/article/details/128319080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [关于OSError: [Errno 24] Too many open files的windows运行python的问题](https://blog.csdn.net/windmyway/article/details/124384309)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [OSError: [Errno 24] Too many open files的解决办法](https://blog.csdn.net/qq_15827941/article/details/115067830)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值