2009-10-05 12 views
5

私は大きな行列を使っているので、NumPyのmemmapを使っています。しかし、明らかにmemmapによって使用されているファイル記述子が閉じられていないため、エラーが発生しています。NumPyとmemmap:[Errno 24]開いているファイルが多すぎます

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 

誰もが私が見下ろす午前何を知っていますか?

答えて

4

memmapはオープンファイル記述子ではなくファイル名をとるため、ファイル記述子temp_fdがリークすると思います。 os.close(temp_fd)は役に立ちますか?


素晴らしいことです。

numpy.memmapにファイルのようなオブジェクトを渡すことができるので、既に持っているファイルディスクリプタからtemp_fdを作成できます。

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

助けてください。それは今働いている。ありがとう。 – plok

関連する問題