Streaming-Daten für Pandas df

8

Ich versuche die Verwendung von Pandas zu simulieren, um auf eine sich ständig ändernde Datei zuzugreifen.

Ich habe eine Datei, die eine CSV-Datei liest, eine Zeile hinzufügt und dann für eine zufällige Zeit schläft, um eine Masseneingabe zu simulieren.

%Vor%

Die zweite Datei prüft auf Änderungen der Daten, indem sie die Form des Datenrahmens ausgibt:

%Vor%

Das Problem damit ist, während ich die richtige Form des DF bekomme, gibt es bestimmte Zeiten, wo es (0x2) ausgibt.

d. h .:

%Vor%

Dies geschieht bei einige , aber nicht zwischen jeder Änderung der Form (die Datei wird zum Datenrahmen hinzugefügt).

Wenn dies passiert, wenn das erste Skript die Datei zum Hinzufügen von Daten öffnet und das zweite Skript nicht darauf zugreifen kann, daher (0x2), tritt dabei ein Datenverlust auf?

Ich kann nicht direkt auf den Stream zugreifen, nur die Ausgabedatei. Oder gibt es andere mögliche Lösungen?

Bearbeiten

Der Zweck ist, die neuen Daten nur zu laden (ich habe einen Code, der das tut) und die Analyse "on the fly" zu machen. Einige der Analysen umfassen Ausgabe / Sek., Grafische Darstellung (ähnlich der Stromaufzeichnung) und einige andere numerische Berechnungen.

Das größte Problem ist, dass ich nur auf die CSV-Datei zugreifen kann und dass ich die Daten so analysieren kann, wie sie ohne Verlust oder Verzögerung kommen.

    
Leb 15.09.2015, 19:31
quelle

2 Antworten

2

Eines der Skripte liest die Datei, während die andere versucht, in die Datei zu schreiben. Beide Skripts können nicht gleichzeitig auf die Datei zugreifen. Wie Padraic Cunningham sagt, können Sie in den Kommentaren eine Sperrdatei implementieren, um dieses Problem zu lösen.

Es gibt ein Python-Paket namens lockfile mit der Dokumentation hier .

Hier ist Ihr erstes Skript mit dem Lockfile-Paket implementiert:

%Vor%

Hier ist Ihr zweites Skript mit dem Lockfile-Paket implementiert:

%Vor%

Ich habe eine Wartezeit von 100ms hinzugefügt, damit ich die Ausgabe auf die Konsole verlangsamen konnte.

Diese Skripte erstellen vor dem Zugriff auf die Datei "data.csv" eine Datei namens "data.lock" und löschen nach dem Zugriff auf die Datei "data.csv" die Datei "data.lock". Wenn in beiden Skripten "data.lock" vorhanden ist, wartet das Skript, bis die Datei "data.lock" nicht mehr existiert.

    
Joshua Goldberg 30.10.2015 05:16
quelle
1

Ihr Simulationsskript liest und schreibt in die Datei data.csv. Sie können gleichzeitig lesen und schreiben, wenn ein Skript die Datei nur als schreibend öffnet und das andere die Datei als schreibgeschützt öffnet.

In diesem Sinne habe ich Ihr Simulationsskript zum Schreiben der Datei in folgendes geändert:

%Vor%

In Python heißt das Öffnen einer Datei mit 'a' nur als Schreibvorgang. Die Verwendung von 'a +' wird mit Lese- und Schreibzugriff verknüpft. Sie müssen sicherstellen, dass der Code, der die Datei schreibt, die Datei nur als schreibgeschützt öffnet, und Ihr Skript, das die Datei liest, darf niemals versuchen, in die Datei zu schreiben. Andernfalls müssen Sie eine andere Lösung implementieren.

Jetzt sollten Sie in der Lage sein, mit Ihrem zweiten Skript zu lesen, ohne das Problem, das Sie erwähnen.

    
Joshua Goldberg 31.10.2015 02:55
quelle

Tags und Links