Tengo una matriz SciPy de 60 GB (matriz) que debo compartir entre más de 5 multiprocessing
Process
objetos. He visto numpy-sharedmem y leí esta discusión en la lista SciPy. Parece haber dos enfoques: numpy-sharedmem
usar multiprocessing.RawArray()
ay mapear NumPy dtype
sa ctype
s. Ahora, numpy-sharedmem
parece ser el camino a seguir, pero todavía tengo que ver un buen ejemplo de referencia. No necesito ningún tipo de bloqueos, ya que la matriz (en realidad una matriz) será de solo lectura. Ahora, debido a su tamaño, me gustaría evitar una copia. Se suena como el método correcto es crear la única copia de la matriz como una sharedmem
matriz y, a continuación, pasar a laProcess
objetos? Un par de preguntas específicas:
¿Cuál es la mejor manera de pasar los identificadores de sharedmem a subes
Process()
? ¿Necesito una cola solo para pasar una matriz? ¿Sería mejor una pipa? ¿Puedo pasarlo como un argumento alProcess()
init de la subclase (donde supongo que está en escabeche)?En la discusión que vinculé anteriormente, ¿se menciona que
numpy-sharedmem
no es seguro para 64 bits? Definitivamente estoy usando algunas estructuras que no son direccionables de 32 bits.¿Hay compensaciones en el
RawArray()
enfoque? ¿Más lento, más buggier?¿Necesito alguna asignación ctype-to-dtype para el método numpy-sharedmem?
¿Alguien tiene un ejemplo de código OpenSource haciendo esto? Soy un aprendiz muy práctico y es difícil hacer que esto funcione sin ningún buen ejemplo que mirar.
Si hay alguna información adicional que pueda proporcionar para ayudar a aclarar esto para otros, comente y la agregaré. ¡Gracias!
Esto debe ejecutarse en Ubuntu Linux y tal vez Mac OS, pero la portabilidad no es una gran preocupación.
multiprocessing
hacer una copia de todo para cada proceso.