【问题标题】:python 2.7 IOError: [Errno 24] Too many open files:python 2.7 IOError: [Errno 24] 打开的文件太多:
【发布时间】:2014-09-26 04:20:15
【问题描述】:

在工作中,我很不幸地修复了由其他人在 python 中编写的糟糕的 url 验证器脚本。这是一个非常混乱的代码,在尝试修复其中一个错误时,我发现了一些我不理解的行为。

脚本必须处理一个包含大约 10,000 个 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,为什么??

【问题讨论】:

    标签: python-2.7


    【解决方案1】:

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

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

    同时下载数百个 URL(带宽、磁盘)可能没有意义。确保下载后所有文件(sockets、磁盘文件)都被正确处理(close()方法被及时调用)。

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

    【讨论】:

    • 是的,这是有道理的。我正在重写整个东西,太混乱了,我更容易从头开始。
    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多