es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Siempre tengo que especificar la forma de la matriz al leer desde la memoria compartida (Python 3.8)?

Estoy intentando utilizar shared_memory en un clúster distribuido con Python multiprocessing. Cada vez que se crea un trabajador en un nuevo nodo, necesito que verifique si ya existe un bloque de memoria compartida con un nombre específico y, si no existe, lo cree a partir de un subconjunto de una tabla de una base de datos externa. Este bloque de memoria compartida debería ser accesible para todos los trabajadores futuros en ese nodo.

Sin embargo, el ejemplo en la documentación de Python (https://docs.python.org/3/library/multiprocessing.shared_memory.html) solo funciona cuando se conoce de antemano la forma de la matriz:

<h1>Adjuntar al bloque de memoria compartida existente</h1>

existing_shm=shared_memory.SharedMemory(name='psm2146746075')

<h1>Tenga en cuenta que a.shape tiene una forma de (6,) y a.dtype es np.int64 en este ejemplo</h1>

c = np.ndarray((6,), dtype=np.int64, buffer=existing_shm.buf)

¿Existe alguna forma de verificar la forma de una matriz en un bloque de memoria compartida sin que se le pase al trabajador como argumento (mis trabajadores no pueden comunicarse entre sí)?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología informática especializado en multiprocessing, memoria compartida, distribuida y Python 3.8, puedo recomendar la siguiente solución para su problema:

    Desafortunadamente, actualmente no existe una forma de determinar la forma de una matriz en un bloque de memoria compartida sin pasarla como argumento al trabajador. Esto se debe a que el bloque de memoria compartida es simplemente una porción de memoria y no contiene ningún metadato sobre su contenido.

    Una solución a este problema es crear un bloque de memoria compartida separado que almacene la información de la forma junto con un identificador único para el bloque de datos. Este bloque de metadatos se puede crear primero y luego cada trabajador puede verificar si ya existe el bloque de datos que requieren comparando el identificador único con los metadatos de los bloques existentes.

    Una vez que un trabajador haya determinado que se necesita crear un nuevo bloque de datos, puede leer la información de la forma del bloque de metadatos y luego proceder a crear el bloque de datos utilizando el método descrito en la documentación de Python.

    Este enfoque permite la creación de bloques de datos con formas desconocidas mientras que todavía permite la verificación eficiente de si ya existe un bloque.

Comments are closed.