Tengo una matriz SciPy de 60 GB (matriz) que debo compartir entre más de 5 multiprocessing Processobjetos. He visto numpy-sharedmem y leí esta discusión en la lista SciPy. Parece haber dos enfoques: numpy-sharedmemusar multiprocessing.RawArray()ay mapear NumPy dtypesa ctypes. Ahora, numpy-sharedmemparece 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 sharedmemmatriz 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-sharedmemno 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.
multiprocessinghacer una copia de todo para cada proceso.