PyQtGraph statt PyQwt

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
BurSchi
User
Beiträge: 5
Registriert: Donnerstag 21. Dezember 2017, 11:53

Hi,
ich habe ein Programm geschrieben, dass jede Sekunde 7 Temperatursensoren ausliest, diese aktuellen Temperaturen dann an jeweils ein Array dranhängt. Auch der Timstamp für die x- Achse wird in einem einfachen Array gespeichert.

Das Ganze habe ich seinerzeit dann PyQwt übergeben und in einem Digramm alle Temperaturkurven darstellen lassen.

Dabei trat dann ein Problem auf. Der Prozess läuft unter Umständen mehrere Tage und dementsprechend groß werden dann die Arrays. PyQwt wurde damit sehr träge. Ich musste das Programm nach ca. 1 Tag abschießen (Speicher war voll) und neu starten. Dann ging es wieder.

Jetzt habe ich das Programm mal wieder vorgekramt und auf Qt5 umgeschrieben. Nun konnte PyQwt damit nicht mehr umgehen und ich habe mich für PyQtGraph als Framework entschieden.

Meine Frage ist nun, ob Ihr mir Tips geben könnt, wie ich mit der Datenfülle umgehen könnte. Ich verwende erstmal ein 2dimensionales Numpy- Array. Ist es sinnvoll, die Daten über den gesamten Prozess im Numpy Array zu halten und den neuen Datensatz jeweils hinzuzufügen (append). Oder ist es besser die Daten aus einer Datei (csv) jeweils neu zu laden?

Müssen beim Update der Plots immer alle Daten neu übergeben werden?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich denke was wirklich hilft ist nur so viel Daten aufzubewahren, wie du sinnvoll verarbeiten kannst. Du kannst ja numpy arrays auch wieder verkleinern.
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@BurSchi: es ist nicht sinnvoll, mit append zu arbeiten, weil dabei immer das gesamte numpy-Array kopiert wird. Über mehrere Stunden sekundenaufgelöste Temperaturen darzustellen macht auch keinen wirklichen Sinn. Brauchst Du das wirklich? Was willst Du mit den Daten machen? Was ist Deine Aufgabe?
BurSchi
User
Beiträge: 5
Registriert: Donnerstag 21. Dezember 2017, 11:53

Danke Euch erstmal.

Nun ja, das dachte ich mir schon. Ich werde mich wohl auf ein Darstellungsintervall von 10sec oder gar einer Minute reduzieren.
Zumal die Daten komplett sowieso nochmal weggeschrieben werden in eine Datei.

@Sirius3: Du würdest also Standardarrays nehmen und die meinetwegen im Minutentakt erweitern?

Was ich damit mache ist: Ich schreibe an einer Brauereisteuerung und die Regelung soll anhand der fein granulierten Daten optimiert werden. Aber die Darstellung der Plots ist in erster Linie nur optisch.

Dann kann ich mir ja den ganzen Numpy Overhead sparen oder? Ich brauche ja wirklich nur die Daten und keine weiteren Methoden dazu.
Antworten