usando numpy.memmap para mapear un archivo de dispositivo

¿Hay alguna razón por la que abrir un archivo de dispositivo (en lugar de un archivo normal) utilizando memmap de numpy no debería funcionar?

self.surface = np.memmap('/dev/fb1', dtype=np.uint16, mode='r+', shape=(320,240)) 

Estoy trabajando con un módulo de kernel personalizado que agrega un dispositivo de almacenamiento de marcos, que funciona bien con el módulo regular de mmap python. Pero el uso de numpy parece colgar el mutex del kernel al acceder al sistema de archivos o algo así (realmente no estoy seguro de lo que está sucediendo).

Mi pregunta aquí es específicamente: ¿esto es algo que el memmap de numpy no puede manejar y debo ir de otra manera?

He hecho otra pregunta en unix stackexchange , pero siento que son 2 preguntas diferentes, así que las he publicado.

Obviamente, esto está en Linux (kubuntu maverick con módulo de kernel personalizado)

Actualización :

Bueno, resulta que puedo crear el memmap bien. El problema que parece es que cuando cierro el proceso sin cerrar específicamente el objeto memmap y simplemente se cuelga en el mutex en el kernel.

No tengo idea de si este problema es con numpy, mi módulo del kernel o algún otro lugar.

Si su código funciona bien con el módulo mmap python, puede usarlo directamente en lugar de numpy.memmap :

 >>> fd = os.open("a", os.O_RDWR) >>> buffer = mmap.mmap(fd, 0) >>> surface = np.ndarray((320,240), np.uint16, buffer) 

Esto tiene la otra ventaja de que tiene más control sobre la asignación de memoria utilizada.

Ahora, el mmap de python tiene sus propias peculiaridades. Como muestra la fuente , llama a msync en la eliminación de la asignación. Tal vez aquí es donde cuelga tu progtwig? (Es posible que pueda reproducir su problema con buffer.flush (), que también se llama msync). ¡Su solución de llamar a close () primero probablemente funcione porque elude a msync!