在工作中我运气不好,在其他人完成的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,为什么??
答案 0 :(得分:0)
使用liNew =“http://”+ li,文件描述符不会超过1024的默认限制,但是将该行更改为liNew = li将使它们超过8000,为什么?
同时下载更多数百个网址(带宽,磁盘)可能没有意义。确保在下载后正确处理所有文件(套接字,磁盘文件)(及时调用close()
方法)。
默认限制(1024)很低,但除非您了解代码的作用,否则不要增加它。