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.

¿Cargar predefinidamente la aplicación WSGI con una actualización secundaria de las estructuras de datos parentales y reactivar a los trabajadores?

La precarga de WSGI en, por ejemplo, gunicorn, permite estructuras de datos residentes en RAM compartidas de sólo lectura en el proceso padre, previo al pre-fork de procesos trabajadores.

¿Cómo puede un proceso trabajador enviar una cola de modificación a la estructura de datos de su padre, de tal manera que el padre realice la modificación a la estructura de datos compartida y luego reincie los procesos trabajadores con los nuevos datos?

Un caso de uso:
* precarga intensiva de recursos
* lecturas de alta frecuencia
* escrituras raras
* escrituras con operaciones de compleja asignación de memoria. Por ejemplo, la preasignación con multiproceso de un bloque de memoria en, por ejemplo, un arreglo, no es realmente adecuada debido a asignaciones de memoria no triviales.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para permitir que un proceso secundario en un entorno de memoria compartida encole una modificación en la estructura de datos del proceso principal, se pueden seguir los siguientes pasos:

    1. Definir un formato de mensaje personalizado que incluya los datos a modificar y cualquier metadato necesario (por ejemplo, el tipo de modificación a aplicar).
    2. Implementar un sistema de mensajería que permita a un proceso secundario enviar un mensaje al proceso principal. Esto se puede lograr utilizando mecanismos de comunicación entre procesos como tuberías, sockets o colas de mensajes.

    3. En el proceso principal, crear una cola o búfer de mensajes para los mensajes entrantes de los procesos secundarios.

    4. En el código de carga del proceso principal, verificar periódicamente la cola de mensajes en busca de mensajes entrantes.

    5. Cuando se reciba un nuevo mensaje, actualizar la estructura de datos compartida de acuerdo con el contenido del mensaje.

    6. Después de actualizar la estructura de datos, volver a generar los procesos secundarios con los nuevos datos.

    Siguiendo este enfoque, los procesos secundarios pueden comunicarse con el proceso principal para modificar la estructura de datos compartida sin necesidad de acceder directamente a la memoria. Este método es particularmente útil en escenarios donde la precarga de los datos compartidos consume muchos recursos y las actualizaciones son raras o complejas.

Comments are closed.