python 2.7 IOError:[Errno 24]打开文件太多:

时间:2014-09-26 04:20:16

标签: python-2.7

在工作中我运气不好,在其他人完成的python中修复了写得不好的url验证器脚本。这是一个非常混乱的代码,并试图修复其中一个错误,我发现了一些我不明白的行为。

脚本必须处理一个大约有1万个网址的文件,它必须检查每个网址,看它是否有效,不仅仅是在它的结构中,还要检查如果它存在(使用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://" + li ,文件描述符不超过1024的默认限制,但将该行更改为 liNew = li 将使它们超过8000,为什么??

1 个答案:

答案 0 :(得分:0)

  

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

  • 之前:打破网址 - 没有下载任何内容(没有打开文件)
  • 之后:正确的网址 - 网址会保存到文件中(有10个网址)

同时下载更多数百个网址(带宽,磁盘)可能没有意义。确保在下载后正确处理所有文件(套接字,磁盘文件)(及时调用close()方法)。

默认限制(1024)很低,但除非您了解代码的作用,否则不要增加它。