我写的测试套件有点文件密集。一段时间后(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的日志和子进程。这可能是我的fd泄露的原因吗?
谢谢, 丹尼尔
更正的代码是:
resource.RLIMIT_NOFILE确实是7,但这是resource.getrlimit()的索引,而不是限制本身。。。resource.getrlimit(resource.RLIMIT_NOFILE)是您想要的顶级范围
相关问题 更多 >
编程相关推荐