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

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

windows *** 作系统下

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

temp.save(label_str, 'TIFF')

错误如下:

Traceback (most recent call last):
  File "D:/d/Paper/PyProjectForPaper/img.py", line 209, in 
    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()

就可以了

可以了

以了

艹……

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/785784.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存