关于OSError: [Errno 24] Too many open files的windows运行python的问题

windows操作系统下

在进行图片分割成小块的时候,在如下代码中出错

temp.save(label_str, 'TIFF')

错误如下:

Traceback (most recent call last):
  File "D:/d/Paper/PyProjectForPaper/img.py", line 209, in <module>
    train_process(img_list[:1000], TRAIN_DATA_SAVE_PATH)
  File "D:/d/Paper/PyProjectForPaper/img.py", line 154, in train_process
    temp.save(label, 'TIFF')
  File "D:\PyCharm\Myprojects\lib\site-packages\PIL\Image.py", line 2300, in save
    save_handler(self, fp, filename)
  File "D:\PyCharm\Myprojects\lib\site-packages\PIL\TiffImagePlugin.py", line 1731, in _save
    _fp = os.dup(fp.fileno())
OSError: [Errno 24] Too many open files

正在找解决方案。。。

参考了Why python has limit for count of file handles? - Stack Overflow中的解决办法,作如下修改限制依旧无法解决问题。

>>>import ctypes
   print("Before: {}".format(ctypes.windll.msvcrt._getmaxstdio()))
Before: 512
>>>ctypes.windll.msvcrt._setmaxstdio(2048)
   print("After: {}".format(ctypes.windll.msvcrt._getmaxstdio()))
After: 2048

经过两天的奋斗……在网上找了一天半解决办法,然而都没成功过,改注册表GDIProcessHandleQuota的大小、在文件中添加close()等。

于是我仔细研究我的代码,修改了文件 open() 和 close() 的位置,于是代码终于跑了起来。然而,跑到一百多条的时候,新建文件夹的时候又报错了,还是同一个位置……也就是说问题没有得到根本解决或者说没有完全解决,但是这个思路是对的。

那么我的解决办法,就朝这个方向了,只要找到代码的文件打开的位置,然后在使用完毕后关掉就可以了。

于是我的问题就变成了,“Image.save() 打开文件后关闭仍占用问题”,解决办法来了

参考https://blog.csdn.net/qq_42679415/article/details/107774299

img = Image.open(image_path)
img.close()

改为如下: 

fp = open(image_path,'rb')
img = Image.open(fp)
fp.close()

PS:windows有一定效果,处理可以在原来基础上多一些,但是解决不了根本问题

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值