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

Python 2.7 python 2.7 IOError:[Errno 24]打开的文件太多:,python-2.7,Python 2.7,在工作中,我运气不好,因为我用python修复了别人编写的一个糟糕的url验证程序脚本。这是一个非常混乱的代码,在试图修复其中一个bug时,我发现了一些我不理解的行为 脚本必须处理一个包含大约10000个url的文件,它必须检查每个url是否有效,不仅要检查其结构,还要检查它是否存在(使用pycurl)。在代码的一部分中,这样做是: for li in lineas: liNew = "http://" + li parsedUrl = urlparse.urlparse(liN

在工作中,我运气不好,因为我用python修复了别人编写的一个糟糕的url验证程序脚本。这是一个非常混乱的代码,在试图修复其中一个bug时,我发现了一些我不理解的行为

脚本必须处理一个包含大约10000个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://”+li,文件描述符不会超过默认限制1024,但是将该行更改为liNew=li将使其超过8000,为什么

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

  • 之前:断开的url-未下载任何内容(未打开任何文件)
  • 之后:正确的url-url保存到文件(有10K个url)
同时下载数百个URL(带宽、磁盘)可能没有意义。确保下载后正确处理所有文件(套接字、磁盘文件)(
close()
方法被及时调用)


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

是的,这是有道理的。我正在重写整件事,它是如此的混乱,我更容易从零开始。