Helllo, Vorrei condividere piccole quantità di dati (< 1K) tra python e processi. I dati sono fisici IO/104 dati IO che cambiano rapidamente e spesso (24x7x365). Ci sarà un singolo "server" che scrive i dati e più client ne leggono le parti. Il sistema su cui viene eseguito utilizza la memoria flash (scheda CF) anziché un disco rigido, quindi sono preoccupato di utilizzare la memoria flash con uno schema basato su file. Mi piacerebbe anche usare meno energia (tempo del processore) dato che siamo alimentati al 100% con energia solare.Come condividere i dati tra i processi python senza scrivere sul disco
- Questa è una preoccupazione valida? Potremmo eventualmente cambiare la scheda CF in un SSD.
- La modifica di un valore utilizzando mmap scrive fisicamente i dati su disco o si tratta di un file virtuale?
- Opereremo su Debian, quindi forse POSIX IPC per il modulo python è la soluzione migliore. Qualcuno l'ha usato?
- Qualcuno ha provato il modulo Python Object Sharing (POSH)? Sembra promettente a prima vista, ma è in "Alpha" e non sembra essere attivamente sviluppato.
Thank You
UPDATE: Abbiamo rallentato la velocità di aggiornamento dei dati massima di circa 10 Hz, ma più tipicamente 1 Hz. I client verranno avvisati solo quando un valore cambia piuttosto che a un tasso di aggiornamento costante. Siamo passati a un modello con più server/più client in cui ogni server è specializzato in un determinato tipo di strumento o funzione. Poiché si è scoperto che la maggior parte della programmazione sarebbe stata eseguita dai programmatori Java, abbiamo finito con l'utilizzo di JSON-RPC su TCP. I server verranno scritti in Java, ma spero ancora di scrivere il client principale in Python e sto facendo delle ricerche sulle implementazioni JSON-RPC.
+1 per python + energia solare. Eccezionale. – gahooa
Puoi commentare la frequenza con cui i dati cambiano e quanto spesso devono essere aggiornati i consumatori? Queste informazioni aiuteranno a scegliere l'approccio migliore. – gahooa
Alcuni valori di dati possono cambiare due volte al secondo mentre alcuni cambiano raramente. Sembra che alcuni degli altri processi possano essere Java, quindi un approccio con socket è il migliore. Penso che proverò a fare qualcosa dove un cliente (consumatore) registra il suo interesse in un determinato valore (ad esempio corrente del motore, stato del commutatore, velocità del vento, ecc.) E il server invia al client un aggiornamento ogni volta che il valore cambia. Il cliente può anche richiedere un cambio di stato per le uscite digitali. – RyanN