您的位置:首页 > 编程语言 > Python开发

python——ubuntu下[Error 24: too many open files]的解决方法

2017-08-03 15:28 417 查看
上一篇博客中我提到,我在使用多线程+协程爬虫抓取数据的时候,当我的协程数×线程数非常大的时候,会提示[Error 24: too many open files]和其他一系列错误。这篇博客就是专门针对这个问题的解决方案,亲测可行。

为什么会报这个错误呢?明明只打开了几个文件啊?

这应该是绝大多数人的第一反应。我当时遇到这个错误的时候也很懵,后来想了想,应该是我每一个协程都获取了访问这个文件的句柄,所以尽管你只把爬取的数据保存到一个文件中,但是程序运行时,可能有很多线程或进程都拥有这个文件的句柄,在程序看来就像打开了很多个文件。

因此针对这种情况唯一的方法就是更改系统默认的最大文件数量。

ubuntu下,可以在终端输入
ulimit -n
来查看当前系统默认的最大文件数量,一般默认为1024.显然,这个值对于爬虫来说比较小了。

有两种修改此默认值的方法。两种方法分别在不同的机器上成功过,第一种简单,但不保证能够成功,如果第一种失败的话,尝试第二种,基本上能够解决问题。

第一种方法:

直接在终端输入:
ulimit -n 10000


我在我自己的电脑上试了这种都没有成功,只在服务器上成功过。

第二种方法:

在终端输入
sudo vim /etc/security/limits.conf
打开文件后,到文件末尾,敲击键盘i开始插入内容:

* soft nofile 10000
* hard nofile 10000


将上面两行写入完毕后,按Esc键,退出编辑模式,然后同时按shift和;键,输入
wq!
保存文件并退出。然后注销重新登陆。此时在在终端输入
ulimit -n
得到的结果就是刚刚设置的值了。这个值其实可以设的再大一点,目前我只设置到了20000.

windows下还没有试过,最近很少登windows了,windows不知道会不会有这样的问题,如果遇到了的话,原理应该是一样的,按照这个思路去找答案应该就可以解决。

以上。欢迎交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: