Pregunta

Helllo, Me gustaría compartir pequeñas cantidades de datos (<1K) entre pitón y procesos. Los datos son física pc / 104 datos IO que cambia rápidamente y, a menudo (24x7x365). Habrá un único "servidor" y escribir los datos de varios clientes que leen porciones de la misma. El sistema funcionará en este utiliza una memoria flash (tarjeta CF) en lugar de un disco duro, por lo que estoy preocupado por el uso de la memoria flash con un esquema basado en archivos. También me gustaría para utilizar menos energía (tiempo de procesador) como somos 100% con energía solar.

  • ¿Es esta una preocupación válida? posiblemente podríamos cambiar la tarjeta CF a un SSD.
  • ¿El cambio de un valor mediante mmap físicamente escribir los datos en el disco o se trata de un archivo virtual?
  • Se va a correr en Debian así que quizás el IPC POSIX para el módulo de Python es la mejor solución. Alguien ha usado?
  • ¿Alguien ha probado el href="http://sourceforge.net/projects/poshmodule/" rel="noreferrer"> Python de objetos Sharing (POSH) módulo

Gracias

ACTUALIZACIÓN: Nos ralentizado el ritmo de actualización de datos máxima de aproximadamente 10 Hz, pero más típicamente de 1 Hz. Los clientes sólo serán notificados cuando se modifica un valor en lugar de a un ritmo constante actualización. Hemos ido a un modelo de múltiples servidores / clientes múltiples, donde cada servidor se especializa en un determinado tipo de instrumento o función. Desde resultó que la mayor parte de la programación que iba a ser hecho por los programadores de Java, terminamos utilizando JSON-RPC sobre TCP. Los servidores bebe será escrito en Java, pero todavía esperan para escribir el principal cliente en Python y estoy de investigación implementaciones JSON-RPC.

¿Fue útil?

Solución

Una alternativa a escribir los datos a presentar en el proceso servidor puede ser escribir directamente a los procesos del cliente:

El uso de conectores de dominio UNIX (o TCP / IP sockets si los clientes se ejecutan en máquinas diferentes) para conectar cada cliente al servidor, y que tienen el servidor de escritura en dichos zócalos. En función del modelo de procesamiento particular, la elección de un cliente / enchufe puede ser realizada por el servidor (por ejemplo, round-robin) o por los clientes de señalización que están listos para más.

Otros consejos

Crea una partición ramfs y escribir a eso. (Se puede usar tmpfs, pero a diferencia de tmpfs, ramfs no se intercambia en el disco). Sin embargo, como ramfs no tiene un límite de tamaño, se debe tener cuidado de que no se quede sin memoria; ya que sólo está escribiendo una pequeña cantidad de datos que hay, que no debería ser un problema.

De esta manera, sus datos no siempre puede escribir en un disco (nota: los perderá si falla la alimentación).

Ver también los documentos ramfs .

Cuando se ejecuta en sistemas de flash, asegúrese de que su sistema de archivos está diseñado adecuadamente para maximizar la vida de la memoria flash (nivelación de desgaste). JFFS y, creo, otros son ahora capaces de hacer esto de manera efectiva. Si se utiliza un sistema de este tipo, no debe ser excesivamente preocupados por el uso del flash, pero ciertamente si usted está escribiendo un flujo constante de datos que te gustaría evitar hacer que el flash.

El uso de un sistema de archivos RAM es una buena idea. Mejor aún es evitar los sistemas de ficheros por completo si el diseño del sistema le permitirá. A tal fin se menciona elegante. Nunca lo he probado, pero hemos encontrado Pyro ( "Python objetos remotos" ) a ser una solución elegante y eficaz en algunos casos similares.

Y, por supuesto, está el módulo de biblioteca multiprocessing estándar, que tiene algunas similitudes en términos de cómo se comunica entre los procesos. Yo empezaría allí para cualquier nuevo desarrollo en esta área, y ve a otro sólo si no logró ser un éxito.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top