Eu tenho um 60GB SciPy Array (Matrix) que devo compartilhar entre 5+ multiprocessing
Process
objetos. Eu vi numpy-sharedmem e li essa discussão na lista SciPy. Parece haver duas abordagens - numpy-sharedmem
e usando multiprocessing.RawArray()
ae mapeando NumPy dtype
s para ctype
s. Agora, numpy-sharedmem
parece ser o caminho a percorrer, mas ainda não vi um bom exemplo de referência. Não preciso de nenhum tipo de bloqueio, já que a matriz (na verdade, uma matriz) será somente leitura. Agora, devido ao seu tamanho, gostaria de evitar uma cópia. Ele soa como o método correto é criar a única cópia da matriz como uma sharedmem
matriz e, em seguida, passá-lo para os Process
objetos? Algumas perguntas específicas:
Qual é a melhor maneira de realmente passar os identificadores de memória compartilhada para subes
Process()
? Eu preciso de uma fila apenas para passar um array? Um cachimbo seria melhor? Posso apenas passá-lo como um argumento para oProcess()
init da subclasse (onde estou assumindo que está em conserva)?Na discussão que vinculei acima, há menção de
numpy-sharedmem
não ser seguro para 64 bits. Definitivamente, estou usando algumas estruturas que não são endereçáveis de 32 bits.Existem vantagens e desvantagens na
RawArray()
abordagem? Mais lento, mais problemático?Eu preciso de algum mapeamento ctype-para-dtype para o método numpy-sharedmem?
Alguém tem um exemplo de código OpenSource fazendo isso? Sou um aprendiz muito prático e é difícil fazer isso funcionar sem nenhum tipo de bom exemplo para olhar.
Se houver alguma informação adicional que eu possa fornecer para ajudar a esclarecer isso para outras pessoas, por favor, comente e eu adicionarei. Obrigado!
Isso precisa ser executado no Ubuntu Linux e Maybe Mac OS, mas a portabilidade não é uma grande preocupação.
multiprocessing
fazer uma cópia de tudo para cada processo.