Domanda

Helllo, Vorrei condividere piccole quantità di dati (<1K) tra pitone e processi. Il dato è fisico pc / 104 dati IO che cambia rapidamente e spesso (24x7x365). Ci sarà un singolo "server" scrittura dei dati e client multipli di lettura porzioni di esso. Il sistema questo verrà eseguito su utilizza la memoria flash (scheda CF) piuttosto che un disco rigido, quindi mi sono preoccupato di indossare la memoria flash con uno schema basato file. Mi piacerebbe anche utilizzare meno energia (tempo di processore) come siamo al 100% ad energia solare.

  • Si tratta di una preoccupazione valida? Potremmo forse cambiare la scheda CF per uno SSD.
  • Fa la modifica di un valore utilizzando mmap scrivere fisicamente i dati su disco o si tratta di un file virtuale?
  • Saremo in esecuzione su Debian in modo forse il POSIX IPC per il modulo python è la soluzione migliore. Qualcuno ha usato?
  • Qualcuno ha provato il Python oggetto Sharing (POSH) modulo? Sembra promettente, a prima vista, ma è in "Alpha" e non sembra essere attivamente in fase di sviluppo.

Grazie

UPDATE: Abbiamo rallentato la velocità di aggiornamento dati massima a circa 10 Hz, ma più tipicamente 1 Hz. I clienti saranno avvisati solo quando un valore cambia, piuttosto che a una velocità costante aggiornamento. Siamo andati a un modello più server / client multipli, dove ogni server si specializza in un certo tipo di strumento o di una funzione. Dal momento che si è scoperto che la maggior parte della programmazione stava per essere fatto da programmatori Java, abbiamo finito per usare JSON-RPC su TCP. I server wil essere scritte in Java, ma ho ancora la speranza di scrivere il principale cliente in Python e sto indagine implementazioni JSON-RPC.

È stato utile?

Soluzione

Un'alternativa alla scrittura dei dati su file nel processo di server potrebbe essere quello di scrivere direttamente ai processi client:

socket di dominio Usa UNIX (o socket TCP / IP se i clienti eseguiti su macchine diverse) per connettere ogni client al server, e hanno la scrittura del server in quelle prese. A seconda del modello particolare l'elaborazione, la scelta di un client / presa può essere effettuata dal server (ad esempio, round-robin), o dai clienti di segnalazione che sono pronti per più.

Altri suggerimenti

Creare una partizione ramfs e scrivere a questo. (Si potrebbe utilizzare tmpfs, ma a differenza di tmpfs, ramfs non viene scambiato a disco). Tuttavia, come ramfs non ha un limite di dimensione, si deve fare attenzione che non si esaurisce la memoria; dal momento che si sta scrivendo solo un po 'di dati di lì, non dovrebbe essere un problema.

In questo modo, i dati non sarà mai essere scritto su un disco (nota: si perde loro se il potere non riesce).

Vedere anche i ramfs documentazione .

Secondo il Wikipedia articolo sulla chiamata di sistema mmap , la memoria mappata file contenuti sono scritti su disco dopo l'aggiornamento.

Hai guardato il modulo multiprocessing (in libreria standard) - soprattutto la parte dello stato di condivisione tra i processi

?

ramfs come detto da Piskvor sembra anche una buona soluzione -. Specialmente quando non tutti i processi sono scritti in Python

Quando si esegue sui sistemi flash, assicurarsi che il file system è stato progettato correttamente per massimizzare la durata della memoria flash (wear leveling). JFFS e, credo, altri sono ora in grado di fare questo in modo efficace. Se si utilizza un sistema del genere, non dovrebbe essere eccessivamente preoccupati per l'uso del flash, ma certamente se si sta scrivendo un flusso costante di dati che ci si vuole evitare di fare che il flash.

Utilizzando un filesystem RAM è una buona idea. Meglio ancora è quello di evitare file system del tutto se il progetto del sistema vi permetterà di. A tal fine si parla POSH. Non ho mai provato, ma abbiamo trovato Pyro ( "python Remote Objects" ) di essere una soluzione elegante ed efficace in alcuni casi simili.

E naturalmente c'è il modulo di libreria multiprocessing di serie, che porta alcune somiglianze in termini di come comunica tra i processi. Mi piacerebbe iniziare lì per ogni nuovo sviluppo in questo settore, e andare altrove solo se non è riuscito a filtrare fuori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top