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

Respuestas a la pregunta(2)

Su respuesta a la pregunta