El trozo de código que tengo se ve un poco de lo que de esta manera:¿Se copian datos de solo lectura en diferentes procesos para multiprocesamiento?
glbl_array = # a 3 Gb array
def my_func(args, def_param = glbl_array):
#do stuff on args and def_param
if __name__ == '__main__':
pool = Pool(processes=4)
pool.map(my_func, range(1000))
¿Hay una manera de asegurarse de que (o fomentar) que los diferentes procesos no recibe una copia de glbl_array pero comparte. Si no hay forma de detener la copia, iré con una matriz memmapped, pero mis patrones de acceso no son muy regulares, por lo que espero que las matrices memmapped sean más lentas. Lo anterior parecía ser lo primero que se debe intentar. Esto está en Linux. Solo quería algunos consejos de Stackoverflow y no quiero molestar a los administradores de sistemas. ¿Cree que ayudará si el segundo parámetro es un objeto inmutable genuino como glbl_array.tostring()
.
Pensé que los diferentes procesos no pueden compartir las variables de memoria – Andrey
@Andrey: Entonces aprendiste algo hoy :) –