NumPy y memmap: Demasiados archivos abiertos

Estoy trabajando con matrices grandes, así que estoy usando el memmap de NumPy. Sin embargo, estoy recibiendo un error, ya que aparentemente los descriptores de archivos utilizados por memmap no se están cerrando.

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) 

Por lo que entiendo, el archivo memmap se cierra cuando se llama al método close (). Sin embargo, el código anterior no puede repetirse para siempre, ya que finalmente arroja el error[Errno 24] Demasiados archivos abiertos “:

  1016 1017 1018 1019 Traceback (most recent call last): File "./memmap_loop.py", line 11, in  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  File "/usr/lib/python2.5/site-packages/numpy/core/memmap.py", line 226, in __new__ EnvironmentError: [Errno 24] Too many open files 

¿Alguien sabe lo que estoy pasando por alto?

Dado que el memmap no toma el descriptor de archivo abierto, sino el nombre del archivo, supongo que temp_fd el descriptor de archivo temp_fd . ¿ os.close(temp_fd) ayuda?


Genial que funcione.

Ya que puede pasar numpy.memmap a un objeto similar a un archivo, puede crear uno a partir del descriptor de archivos que ya tiene, temp_fd .

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