Tengo una estructura de datos compleja (tipo definido por el usuario) en la que se realiza una gran cantidad de cálculos independientes. La estructura de datos es básicamente inmutable. Digo básicamente, porque aunque la interfaz parece inmutable, internamente se está realizando una evaluación diferida. Algunos de los atributos calculados de forma diferida se almacenan en diccionarios (valores de retorno de funciones costosas por parámetro de entrada). Me gustaría usar el módulo Pythons multiprocessing para paralelizar estos cálculos. Hay dos preguntas en mi mente.Compartir datos entre procesos en Python
- ¿Cuál es la mejor forma de compartir la estructura de datos entre procesos?
- ¿Hay alguna manera de manejar el problema de la evaluación diferida sin usar bloqueos (múltiples procesos escriben el mismo valor)?
¡Gracias de antemano por cualquier respuesta, comentario o aclaración!
¿Qué tan grande/complejo estás hablando? Cuando se envía un "cálculo independiente", ¿sabe antes del inicio qué atributos perezosos se necesitan? – MattH
El problema es básicamente una validación cruzada de dejar salir de una vez en un gran conjunto de muestras de datos. Me lleva unas dos horas en mi máquina en un solo núcleo, pero tengo acceso a una máquina con 24 núcleos y me gustaría aprovechar esa potencia. No sé de antemano cuál de los atributos será necesario para un solo cálculo, pero sé que eventualmente (sobre todos los cálculos) se necesitarán todos los atributos, así que podría simplemente cargarlos por adelantado (tendría que probar eso aunque) –