Helllo, Ich möchte kleine Datenmengen (< 1K) zwischen Python und Prozesse teilen. Die Daten sind physische PC/104 IO-Daten, die sich schnell und oft ändern (24x7x365). Es wird einen einzelnen "Server" geben, der die Daten schreibt und mehrere Clients, die Teile davon lesen. Das System, auf dem es ausgeführt wird, verwendet Flash-Speicher (CF-Karte) und nicht eine Festplatte. Daher mache ich mir Sorgen, dass ich den Flash-Speicher mit einem dateibasierten Schema abnutzen könnte. Ich möchte auch weniger Energie (Prozessorzeit) verwenden, da wir zu 100% mit Solarenergie betrieben werden.So teilen Sie Daten zwischen Python-Prozessen, ohne auf Festplatte zu schreiben
- Ist das eine berechtigte Sorge? Wir könnten möglicherweise die CF-Karte in eine SSD ändern.
- Wird beim Ändern eines Werts mit mmap die Daten physisch auf die Festplatte geschrieben oder handelt es sich um eine virtuelle Datei?
- Wir werden auf Debian laufen, also ist vielleicht das POSIX IPC für Python-Modul die beste Lösung. Hat jemand es benutzt?
- Hat jemand das Python Object Sharing (POSH) Modul versucht? Es sieht auf den ersten Blick vielversprechend aus, ist aber in "Alpha" und scheint nicht aktiv entwickelt zu werden.
Danke
UPDATE: Ich verlangsamte die maximale Datenaktualisierungsrate auf etwa 10 Hz nach unten, aber typischen 1 Hz. Clients werden nur benachrichtigt, wenn sich ein Wert ändert, statt mit einer konstanten Aktualisierungsrate. Wir sind zu einem Modell mit mehreren Servern/mehreren Clients gegangen, bei dem jeder Server auf einen bestimmten Instrumententyp oder eine bestimmte Funktion spezialisiert ist. Da es sich herausstellte, dass die Programmierung hauptsächlich von Java-Programmierern durchgeführt wurde, verwendeten wir JSON-RPC über TCP. Die Server werden in Java geschrieben sein, aber ich hoffe immer noch, den Hauptclient in Python zu schreiben und JSON-RPC-Implementierungen zu untersuchen.
+1 für python + solar powered. Genial. – gahooa
Können Sie uns mitteilen, wie oft sich die Daten ändern und wie oft die Verbraucher aktualisiert werden müssen? Diese Information wird helfen, den besten Ansatz auszuwählen. – gahooa
Einige Datenwerte können sich zweimal pro Sekunde ändern, während sich einige nur selten ändern. Es sieht so aus, als ob einige der anderen Prozesse Java sind, so dass ein Socket-Ansatz am besten aussieht. Ich denke, ich werde versuchen, etwas zu tun, wo ein Kunde (Verbraucher) sein Interesse an einem bestimmten Wert registriert (z. B. Motorstrom, Schalterstatus, Windgeschwindigkeit usw.) und der Server dem Client ein Update sendet, wenn sich der Wert ändert. Der Client kann auch eine Statusänderung für digitale Ausgänge anfordern. – RyanN