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

当使用多线程+协程爬虫时,可能会遇到[Error 24: too many open files]的问题。该错误是因为每个协程都持有了文件句柄,导致看似打开了很多文件。解决办法是更改Ubuntu系统默认的最大文件数量。可以通过查看当前限制,然后通过修改或编辑来提升这个限制。若修改失败,可以尝试第二种方法,确保重启系统使更改生效。
摘要由CSDN通过智能技术生成

上一篇博客中我提到,我在使用多线程+协程爬虫抓取数据的时候,当我的协程数×线程数非常大的时候,会提示[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不知道会不会有这样的问题,如果遇到了的话,原理应该是一样的,按照这个思路去找答案应该就可以解决。


以上。欢迎交流。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值