gpt4 book ai didi

python - NumPy 和内存映射 : [Errno 24] Too many open files

转载 作者:太空狗 更新时间:2023-10-30 01:17:42 25 4
gpt4 key购买 nike

我正在处理大型矩阵,所以我使用的是 NumPy 的内存映射。但是,我收到一个错误,因为显然没有关闭 memmap 使用的文件描述符。

import numpy
import tempfile

counter = 0
while True:
temp_fd, temporary_filename = tempfile.mkstemp(suffix='.memmap')
map = numpy.memmap(temporary_filename, dtype=float, mode="w+", shape=1000)
counter += 1
print counter
map.close()
os.remove(temporary_filename)

据我了解,调用 close() 方法时会关闭 memmap 文件。但是,上面的代码不能永远循环下去,因为它最终会抛出“[Errno 24] 打开的文件过多”错误:

    1016
1017
1018
1019
Traceback (most recent call last):
File "./memmap_loop.py", line 11, in <module>
File "/usr/lib/python2.5/site-packages/numpy/core/memmap.py", line 226, in __new__
EnvironmentError: [Errno 24] Too many open files
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python2.5/site-packages/apport_python_hook.py", line 38, in apport_excepthook
ImportError: No module named packaging_impl

Original exception was:
Traceback (most recent call last):
File "./memmap_loop.py", line 11, in <module>
File "/usr/lib/python2.5/site-packages/numpy/core/memmap.py", line 226, in __new__
EnvironmentError: [Errno 24] Too many open files

有人知道我忽略了什么吗?

最佳答案

由于 memmap 不使用打开的文件描述符,而是使用文件名,我想你泄漏了 temp_fd 文件描述符。 os.close(temp_fd) 有帮助吗?


太棒了,它有效。

由于您可以向 numpy.memmap 传递一个类文件对象,因此您可以从已有的文件描述符 temp_fd 创建一个对象。

fobj = os.fdopen(temp_fd, "w+")
numpy.memmap(fobj, ...

关于python - NumPy 和内存映射 : [Errno 24] Too many open files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1519956/

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