Aproveitando “Copy-on-Write” para copiar dados para processos de multiprocessamento.Pool ()

Eu tenho um pouco demultiprocessing Código Python que se parece um pouco com isso:

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()

Depois de ler as respostas sobre como a memória funciona em outras respostas do StackOverflow, como estaUso de memória de multiprocessamento Python Fiquei com a impressão de que isso não usaria memória na proporção de quantos processos usei para o multiprocessamento, pois é cópia na gravação e não modifiquei nenhum dos atributos demy_instance. No entanto, vejo muita memória para todos os processos quando executo o topo, pois a maioria dos meus processos está usando muita memória (essa é a saída principal do OSX, mas posso replicar no Linux).

Minha pergunta é basicamente, estou interpretando isso corretamente, pois minha instância deMyClass é realmente duplicado na piscina? E se sim, como posso evitar isso; eu não deveria usar uma construção como essa? Meu objetivo é reduzir o uso de memória para uma análise 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

questionAnswers(2)

yourAnswerToTheQuestion