Windows下解决: [Errno 24] Too many open files. (含Linux系统解决方法)

前言:

当读者看到此博客时,大概率是Python遇到读取文件出现[Errno 24] Too many open files.我也小白,这是我在Tensorflow读取本地训练数据时出现的,看网上也有如爬虫等读取文件时产生的情况. 网上找了一些资料大致是说多线程读取文件太多,超出系统的限制.

但是解决方法,我找遍了博客资料都在说,这种情况多发生在linux系统下,给出的方法也是主要针对Linux的. 博客中对Linux系统解决方法如下:

Linux可以在终端输入 ulimit -n 来查看当前系统默认的最大文件数量,一般默认为1024(大批量操作文件时会不够).

第一种方法:
在终端输入: ulimit -n 10000

第二种方法:
在终端输入sudo vim /etc/security/limits.conf打开配置文件增加配置.滑动到文件末尾,敲击键盘i插入内容:

* soft nofile 10000 

* hard nofile 10000

按Esc键,退出编辑模式,然后同时按shift和;键,输入wq!保存文件并退出,重启系统,就把最大处理文件数改成10000了,其实你还可以放大(根据自身的情况改吧)

 

以上就是Linux系统下的解决方法,到此是网上大概率可以找到的资料,我找了一圈没有windows系统的方法,纳闷了,可能是笔者电脑性能差吧,才遇到这种情况.

那遇到了总要解决,解决思路我参照了上述的思想,首先系统配置数量看似也可行,但是不知道应该配置到哪里去?所以放弃了.再思考其他方法.没法配置,那在程序代码中控制文件打开和关闭总可以吧,按这个思路我在代码中,在每次循环打开文件的结尾,自觉的加了文件open处理执行完,每次都去关闭当前文件流,(这样似乎每次打开就关闭了吧),代码如下

for file in trainDataSets:
    image_data = Image.open("D:\\ResearchModel\\datasets\\CatsDogs\\train_uniform\\"+file)
    image_trains.append(image_data)
    # 切分 将label标签信息抽离
    labels =  file.split(".")
    if labels[0] == "cat":
        image_labels.append(0)
    elif labels[0] == "dog":
        image_labels.append(1)

    # 这部分就是我添加的,每个文件处理完之后再关闭,然后list循环中取下一张文件
    image_data.close()

Tips:这样做,不知道 对性能是不是有很大影响,只是我读取文件是ok的了,也可以完整读取出所有的文件.(参照Linux思想是一次读取量放大,那我们就每次读取后关闭,我觉得思想是可以的,这种方法在Linux中感觉也可以使用,这样也不用去调配置了)

资料:

Linux下  : https://blog.csdn.net/qq_23926575/article/details/76619827

发布了71 篇原创文章 · 获赞 117 · 访问量 30万+
App 阅读领勋章
微信扫码 下载APP
阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览