OSError : [Errno 24] 打开的文件太多

Posted

技术标签:

【中文标题】OSError : [Errno 24] 打开的文件太多【英文标题】:OSError : [Errno 24] Too many open files 【发布时间】:2020-03-07 02:08:42 【问题描述】:

我有一个 csv 文件,我在每个脚本结束后读取它的值。 大约 20 分钟后,我收到错误 OSError: Errno 24] Too many open files: "file path pointing to csv file"

尝试将 ulimit -Sn 设置为 20000

with open(path) as id_list:
    csv_reader = csv.DictReader(id_list, delimiter=',')
    for i in csv_reader:
        if i['TestScript'] == filename:
            return (i['TestID'])
    return ("Assign ID For " + filename)

【问题讨论】:

这段代码只打开一个文件;如果它是您的问题的根源,那么它必须在一个循环或一个多次调用的函数/方法中。请向我们展示足够的代码来演示/重现问题。 ***.com/help/minimal-reproducible-example 【参考方案1】:

(编辑:)您的代码实际上应该可以正常运行;但是你将不得不例如在类似的函数中调用它

def check(path, filename):
    with open(path) as id_list:
        csv_reader = csv.DictReader(id_list, delimiter=',')
        for i in csv_reader:
            if i['TestScript'] == filename:
                return i['TestID']
    return f"Assign ID For filename"

您现在可以调用检查功能,例如对于路径列表中的每个路径等。

【讨论】:

“如果你在 with 语句中返回,它不会像你期望的那样关闭文件句柄。” 我不认为这是真的;见***.com/questions/9885217/… @kaya3,感谢您的澄清!我怀疑您在问题下的评论是正确的,指出与with 未正确关闭无关的其他问题...

以上是关于OSError : [Errno 24] 打开的文件太多的主要内容,如果未能解决你的问题,请参考以下文章

OSError: [Errno 19] 无法打开 uinput 设备:没有这样的设备

socketserver OSError:[Errno 98] Address already in use

python-serial OSError: [Errno 11] 资源暂时不可用

Python创建文件报错OSError:[Errno 22] Invalid argument处理

python使用open的OSError: [Errno 22] Invalid argument错误

OSError:[Errno 26] 文本文件忙:'baremetrics'