Aprovechando "Copiar en escritura" para copiar datos en multiprocesamiento. Procesos de trabajo de grupo ()
Tengo un poco demultiprocessing
Código de Python que se parece un poco a esto:
import time
from multiprocessing import Pool
import numpy as np
class MyClass(object):
def __init__(self):
self.myAttribute = np.zeros(100000000) # basically a big memory struct
def my_multithreaded_analysis(self):
arg_lists = [(self, i) for i in range(10)]
pool = Pool(processes=10)
result = pool.map(call_method, arg_lists)
print result
def analyze(self, i):
time.sleep(10)
return i ** 2
def call_method(args):
my_instance, i = args
return my_instance.analyze(i)
if __name__ == '__main__':
my_instance = MyClass()
my_instance.my_multithreaded_analysis()
Después de leer las respuestas sobre cómo funciona la memoria en otras respuestas de StackOverflow como estaUso de memoria multiprocesamiento de Python Tenía la impresión de que esto no usaría la memoria en proporción a la cantidad de procesos que utilicé para el multiprocesamiento, ya que es copia en escritura y no he modificado ninguno de los atributos demy_instance
. Sin embargo, veo mucha memoria para todos los procesos cuando ejecuto la parte superior, dice que la mayoría de mis procesos están usando mucha memoria (esta es la salida principal de OSX, pero puedo replicar en Linux).
Mi pregunta es básicamente, ¿estoy interpretando esto correctamente en que mi instancia deMyClass
está realmente duplicado en la piscina? Y si es así, ¿cómo puedo evitar esto? ¿No debería usar una construcción como esta? Mi objetivo es reducir el uso de memoria para un análisis computacional.
PID COMMAND %CPU TIME #TH #WQ #PORT MEM PURG CMPRS PGRP PPID STATE
2494 Python 0.0 00:01.75 1 0 7 765M 0B 0B 2484 2484 sleeping
2493 Python 0.0 00:01.85 1 0 7 765M 0B 0B 2484 2484 sleeping
2492 Python 0.0 00:01.86 1 0 7 765M 0B 0B 2484 2484 sleeping
2491 Python 0.0 00:01.83 1 0 7 765M 0B 0B 2484 2484 sleeping
2490 Python 0.0 00:01.87 1 0 7 765M 0B 0B 2484 2484 sleeping
2489 Python 0.0 00:01.79 1 0 7 167M 0B 597M 2484 2484 sleeping
2488 Python 0.0 00:01.77 1 0 7 10M 0B 755M 2484 2484 sleeping
2487 Python 0.0 00:01.75 1 0 7 8724K 0B 756M 2484 2484 sleeping
2486 Python 0.0 00:01.78 1 0 7 9968K 0B 755M 2484 2484 sleeping
2485 Python 0.0 00:01.74 1 0 7 171M 0B 594M 2484 2484 sleeping
2484 Python 0.1 00:16.43 4 0 18 775M 0B 12K 2484 2235 sleeping