Aquí está la situación: tengo un objeto masivo que debe cargarse en la memoria. Tan grande que si se carga en dos veces irá más allá de la memoria disponible en mi máquina (y no, no puedo actualizar la memoria). Tampoco puedo dividirlo en pedazos más pequeños. Por simplicidad, digamos que el objeto es de 600 MB y solo tengo 1 GB de RAM. Necesito usar este objeto desde una aplicación web, que se ejecuta en múltiples procesos, y no controlo cómo se genera (un equilibrador de carga externo lo hace), así que no puedo confiar solo en crear el objeto en algún hilo/proceso maestro y luego desovando de los niños. Esto también elimina la posibilidad de usar algo como POSH porque se basa en su propia llamada tenedor personalizada. Tampoco puedo usar algo como una base de datos de memoria SQLite, mmap o los módulos posix_ipc, sysv_ipc y shm porque esos actúan como un archivo en la memoria, y estos datos tienen que ser un objeto para mí para usarlos. Usando uno de ellos, tendría que leerlo como un archivo y luego convertirlo en un objeto en cada proceso individual y BAM, la falla de segmentación sobrepasaría el límite de memoria de la máquina porque intenté cargar una segunda copia.¿Cómo almaceno un objeto Python en la memoria para que lo usen los diferentes procesos?
Debe haber alguna manera de almacenar un objeto Python en la memoria (y no como un archivo/cadena/serializado/en escabeche) y tenerlo accesible desde cualquier proceso. Simplemente no sé qué es. He buscado en todo StackOverflow y Google y no puedo encontrar la respuesta a esto, así que espero que alguien me pueda ayudar.
No estoy seguro de lo que quiere decir con "porque esos actúan como un archivo en la memoria". La memoria compartida es una pieza de memoria, no un archivo. Puede usar esa memoria para almacenar cualquier cosa, incluso un objeto. Esto podría no ser tan obvio en Python, pero en C sí lo es. ¿Tiene que ser una solución solo de Python, o considerará una solución híbrida de Python/C o Python/C++ para acceder indirectamente al objeto a través de enlaces C/C++ a un objeto en la memoria compartida? –
Como esas cosas actúan como archivos en la memoria, vea http://docs.python.org/library/mmap.html por ejemplo. –
¿Ayudaría algo así como Memcached para Python? – doremi