OSError: [Errno 24] Too many open files:

OSError: [Errno 24] Too many open files
今天在开发过程中遇到了以上报错,大致场景是我使用线程池实现文件的读写。所以正常我会使用1000-2000个线程去打开文件,所以大概率为系统限制。

输入以下命令:
$ ulimit -n
1024
果然如我所预想,得到的结果是1024,就是说系统限制为同时打开1024个文件。
修改方法:
1、将自己的线程数改小,使之符合这个限制(只是方法)。
2、将这个限制值改大。
a、ulimit -n 2048(此方法为临时修改,当前有效,退出后就恢复原来设置)
b、修改以下文件
sudo vim /etc/security/limits.conf
> soft nofile 2048
>hard nofile 2048
保存后重启。

当读者看到此博客时,大概率是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中感觉也可以使用,这样也不用去调配置了)
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值