gpt4 book ai didi

python - 检测 python 中的文件句柄泄漏?

转载 作者:太空狗 更新时间:2023-10-29 21:27:41 28 4
gpt4 key购买 nike

我的程序似乎正在泄漏文件句柄。我怎样才能找到位置?

我的程序在几个不同的地方使用文件句柄——子进程的输出,调用 ctypes API (ImageMagick) 打开文件,然后复制它们。

它在 shutil.copyfile 中崩溃,但我很确定这不是它泄漏的地方。

Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Python25\Lib\site-packages\magpy\magpy.py", line 874, in main
magpy.run_all()
File "C:\Python25\Lib\site-packages\magpy\magpy.py", line 656, in run_all
[operation.operate() for operation in operations]
File "C:\Python25\Lib\site-packages\magpy\magpy.py", line 417, in operate
output_file = self.place_image(output_file)
File "C:\Python25\Lib\site-packages\magpy\magpy.py", line 336, in place_image
shutil.copyfile(str(input_file), str(self.full_filename))
File "C:\Python25\Lib\shutil.py", line 47, in copyfile
fdst = open(dst, 'wb')
IOError: [Errno 24] Too many open files: 'C:\\Documents and Settings\\stuart.axon\\Desktop\\calzone\\output\\wwtbam4\\Nokia_NCD\\nl\\icon_42x42_V000.png'
Press any key to continue . . .

最佳答案

我遇到了类似的问题,在 subprocess.Popen() 调用期间用完了文件描述符。我使用以下脚本来调试正在发生的事情:

import os
import stat

_fd_types = (
('REG', stat.S_ISREG),
('FIFO', stat.S_ISFIFO),
('DIR', stat.S_ISDIR),
('CHR', stat.S_ISCHR),
('BLK', stat.S_ISBLK),
('LNK', stat.S_ISLNK),
('SOCK', stat.S_ISSOCK)
)

def fd_table_status():
result = []
for fd in range(100):
try:
s = os.fstat(fd)
except:
continue
for fd_type, func in _fd_types:
if func(s.st_mode):
break
else:
fd_type = str(s.st_mode)
result.append((fd, fd_type))
return result

def fd_table_status_logify(fd_table_result):
return ('Open file handles: ' +
', '.join(['{0}: {1}'.format(*i) for i in fd_table_result]))

def fd_table_status_str():
return fd_table_status_logify(fd_table_status())

if __name__=='__main__':
print fd_table_status_str()

您可以导入此模块并调用 fd_table_status_str() 以记录代码中不同位置的文件描述符表状态。

另外,确保 subprocess.Popen 实例被销毁。在 Windows 中保留 Popen 实例的引用会阻止 GC 运行。如果保留实例,则不会关闭关联的管道。更多信息 here .

关于python - 检测 python 中的文件句柄泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/561988/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com