我有一个在一堆寄存器上迭代的代码。它打开一些文件描述符,唯一的目的是使外部库触发的消息静音(anoying)。文件描述符是通过以下方式打开的:
import sys
import os
...
with open(os.devnull, 'w') as devnull:
oldstderr_fno = os.dup(sys.stderr.fileno())
os.dup2(devnull.fileno(), 2)
# here I call the noisy external library
os.dup2(oldstderr_fno, 2)
del oldstderr_fno
如果迭代次数少,代码运行良好。当我尝试遍历整个数据集时,最终得到错误:
OSError: [Errno 24] Too many open files
我怀疑错误来自于我使外部库调用静音的方式
我尝试通过以下输出跟踪无法关闭文件描述符的位置:
import psutil
open_fd = len(psutil.Process().open_files())
print("Open FDs: %d" % open_fd)
但是,报告的打开文件的数量是恒定的(只有2个,正如代码的其他部分所预期的那样)
问题(欢迎回答任何问题):
根据Tavian Barnes提供的宝贵意见,我通过显式关闭文件描述符得到了一个解决方案,这样第一个代码块就变成:
相关问题 更多 >
编程相关推荐