我编写了一个测试套件,它需要频繁地对文件进行操作。在运行一段时间后(2小时),我遇到了IOError: [Errno 24] Too many open files: '/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的日志记录器和子进程。这可能是导致文件描述符泄漏的原因吗?
谢谢, Daniel
resource.getrlimit(resource.RLIMIT_NOFILE)
。resource.RLIMIT_NOFILE
只是一个访问信息的常量。 - chuck