在python中打开文件太多

我写了一种高度文件密集的测试套件。过了一段时间(2h),我收到一个IOError:[Errno 24]打开的文件太多:’/ tmp / tmpxsqYPm’。我双重检查所有文件句柄,无论我们再次关闭它们。但是错误仍然存​​在。

我试图找出使用resource.RLIMIT_NOFILE和当前打开的文件描述符的数量的允许文件描述符的数量:

def get_open_fds():

    fds = []
    for fd in range(3,resource.RLIMIT_NOFILE):
            try:
                    flags = fcntl.fcntl(fd, fcntl.F_GETFD)
            except IOError:
                    continue

            fds.append(fd)

    return fds

所以如果我运行以下测试:

print get_open_fds()
for i in range(0,100):
    f = open("/tmp/test_%i" % i, "w")
    f.write("test")
    print get_open_fds()

我得到这个输出:

[]
/tmp/test_0
[3]
/tmp/test_1
[4]
/tmp/test_2
[3]
/tmp/test_3
[4]
/tmp/test_4
[3]
/tmp/test_5
[4] ...

这很奇怪,我预计打开的文件描述符越来越多。我的脚本是否正确?

我使用python的记录器和子进程。这可能是我的fd泄漏的原因吗?

谢谢,
丹尼尔

您的测试脚本会覆盖每次迭代,这意味着文件每次都会关闭。用管道记录文件和子进程都会使用描述符,这可能导致耗尽。
翻译自:https://stackoverflow.com/questions/4386482/too-many-open-files-in-python

转载注明原文:在python中打开文件太多