2009-10-05 13 views
5

Ich arbeite mit großen Matrizen, also benutze ich NumPy's memmap. Ich erhalte jedoch einen Fehler, da anscheinend die von memap verwendeten Dateideskriptoren nicht geschlossen werden.NumPy und memmap: [Errno 24] Zu viele offene Dateien

Soweit ich verstehe, wird die Memmap-Datei geschlossen, wenn die Methode close() aufgerufen wird. Allerdings ist die obige Code kann nicht in einer Schleife für immer, da es schließlich die „[Errno 24] Zu viele offene Dateien“ Fehler führt:

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 

Weiß jemand, was ich mit Blick auf?

Antwort

4

Da die memmap nicht den geöffneten Dateideskriptor, sondern den Dateinamen annimmt, nehme ich an, dass Sie den Dateideskriptor temp_fd durchlecken. Unterstützt os.close(temp_fd)?


Großartig, dass es funktioniert.

Da Sie numpy.memmap ein dateiähnliches Objekt übergeben können, können Sie eines aus dem bereits vorhandenen Dateideskriptor temp_fd erstellen.

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

Es hilft. Es funktioniert jetzt. Vielen Dank. – plok

Verwandte Themen