Helllo, Me gustaría compartir pequeñas cantidades de datos (< 1K) entre python y procesos. Los datos son físicos pc/104 IO datos que cambian rápidamente y a menudo (24x7x365). Habrá un único "servidor" que escribirá los datos y múltiples clientes que leen partes de él. El sistema en el que se ejecutará utiliza una memoria flash (tarjeta CF) en lugar de un disco duro, por lo que me preocupa el desgaste de la memoria flash con un esquema basado en archivos. También me gustaría usar menos energía (tiempo de procesador) ya que somos 100% de energía solar.Cómo compartir datos entre procesos Python sin escribir en el disco
- ¿Es esto una preocupación válida? Posiblemente podríamos cambiar la tarjeta CF a una SSD.
- ¿Cambia físicamente un valor utilizando mmap los datos en el disco o es un archivo virtual?
- Funcionaremos en Debian, por lo que quizás el POSIX IPC para el módulo python sea la mejor solución. ¿Alguien lo ha usado?
- ¿Alguien ha probado el módulo Python Object Sharing (POSH)? Parece prometedor a primera vista, pero está en "Alpha" y no parece estar desarrollándose activamente.
Gracias
ACTUALIZACIÓN: Nos frenado el ritmo de actualización de datos máxima de aproximadamente 10 Hz, pero más típicamente de 1 Hz. A los clientes solo se les notificará cuando cambie un valor en lugar de hacerlo a una tasa de actualización constante. Hemos ido a un modelo de servidores múltiples/clientes múltiples donde cada servidor se especializa en cierto tipo de instrumento o función. Dado que resultó que la mayoría de la programación iba a ser realizada por programadores de Java, terminamos usando JSON-RPC sobre TCP. Los servidores estarán escritos en Java pero aún espero escribir el cliente principal en Python y estoy investigando las implementaciones de JSON-RPC.
+1 para python + alimentado por energía solar. Increíble. – gahooa
¿Puede comentar con qué frecuencia cambian los datos y con qué frecuencia deben actualizarse? Esa información ayudará a elegir el mejor enfoque. – gahooa
Algunos valores de datos pueden cambiar dos veces por segundo, mientras que otros cambian raramente. Parece que algunos de los otros procesos pueden ser Java, por lo que un enfoque de sockets se ve mejor. Creo que intentaré hacer algo cuando un cliente (consumidor) registre su interés en cierto valor (por ejemplo, corriente del motor, estado del interruptor, velocidad del viento, etc.) y el servidor envía al cliente una actualización cada vez que cambia el valor. El cliente también puede solicitar un cambio de estado para las salidas digitales. – RyanN