2014-09-26 50 views
1

在工作中,我运气不好,已经修复了由别人完成的python中写得不好的url验证器脚本。这是一个非常混乱的代码,并试图修复其中一个错误,我发现了一些我不明白的行为。python 2.7 IOError:[Errno 24]太多打开的文件:

脚本必须处理一个文件,其中包含大约10万个url,它必须检查每个url以查看它是否有效,不仅在它的结构中,还检查它是否存在(使用pycurl)。在代码的一部分,这样做是:

for li in lineas: 
    liNew = "http://" + li 
    parsedUrl = urlparse.urlparse(liNew)  

在这种情况下,错误是增加的“http://”在该行的开始,因为当时正在对剧本之前完成。所以我改变了代码如下:

for li in lineas: 
    liNew = li 
    parsedUrl = urlparse.urlparse(liNew)  

现在,相同的输入文件中的脚本失败,错误:

IOError: [Errno 24] Too many open files:/path/to/file/being/written/to.txt 

随着LINEW = “HTTP://” +李,文件描述符不超过1024的默认限制,但将该行更改为liNew = li将使它们超过8000,为什么?

回答

0

With liNew = "http://" + li, file descriptors don't go over the default limit of 1024, but changing that line to liNew = li will make them go over 8000, why ??

  • 前:URL损坏 - 没有获取下载(没有文件打开)
  • 后:正确的URL - 网址保存到文件(有10K的URL)

它可能没有意义同时下载几百个URL(带宽,磁盘)。确保所有文件(套接字,磁盘文件)在下载后妥善处理(及时调用close()方法)。

默认限制(1024)很低,但不会增加它,除非您明白代码的作用。

+0

是的,这是有道理的。我正在重写整个事情,这是一个混乱,我更容易从头开始。 – Juancho 2014-09-27 23:55:54

相关问题