Estoy tratando de encontrar una forma de compartir memoria entre procesos de python. Básicamente, existen objetos que existen que múltiples procesos de python deben poder LEER (solo leer) y usar (sin mutación). En este momento esto se implementa usando redis + cadenas + cPickle, pero cPickle ocupa un tiempo de CPU precioso, por lo que me gustaría no tener que usar eso. La mayoría de las implementaciones de memoria compartida de python que he visto en los internets parecen requerir archivos y pepinillos, que es básicamente lo que estoy haciendo y exactamente lo que estoy tratando de evitar.Memoria compartida entre procesos de python
Lo que me pregunto es si habría una manera de escribir un tipo ... básicamente una base de datos/servidor de objetos en python en memoria y un módulo C correspondiente para interactuar con la base de datos?
Básicamente, el módulo C le pediría al servidor una dirección para escribir un objeto, el servidor respondería con una dirección, luego el módulo escribiría el objeto y notificaría al servidor que se escribió un objeto con una clave dada al disco en la ubicación especificada. Luego, cuando cualquiera de los procesos quería recuperar un objeto con una clave dada, simplemente le pedía a la base de datos la ubicación de la memoria para la clave dada, el servidor respondería con la ubicación y el módulo sabría cómo cargar ese espacio en la memoria y transfiere el objeto python nuevamente al proceso python.
¿Es totalmente irrazonable o realmente muy difícil de implementar? ¿Estoy persiguiendo algo que es imposible? Cualquier sugerencia será bienvenida. Gracias internet.
¿Qué tan valioso es el tiempo de su CPU que vale la pena descargar una solución de trabajo que sea mucho menos complicada de mantener sincronizada de lo que está proponiendo? Lo que está pidiendo se puede hacer, pero será un gran dolor en el culo hacer * correctamente *. – millimoose
El tiempo de CPU es el más preciado. Básicamente, desatornillar objetos puede tomar desde 20 ms (para uno pequeño) hasta 60 ms (para uno grande). Personalmente siento que estos dos tiempos son demasiado largos. EDITAR: Demasiado tiempo en el sentido de que tiene que haber una manera mejor, no es que creo que cPickle no se esfuerce lo suficiente. – nickneedsaname
Compartir la memoria sería factible, pero compartir objetos será muy difícil ... Puede encontrar una pregunta relacionada aquí: http://stackoverflow.com/questions/1268252/python-possible-to-share-in-memory-data -entre-2-procesos-separados (hay una buena reseña de Alex Martelli que explica por qué es difícil). – ChristopheD