ich bastel gerade an einem Programm das Messwerte von einem USB-Gerät einließt und sie parallel in einem Liveplot darstellen soll, das ganze soll über ein Tkinter-GUI haben. Ziel dabei ist eine möglichst hohe (und konstante) Datenrate, weshalb ich probiere den Liveplot in eine anderen Thread auszulagern.
Den Datenabruf realisiere über eine Konstruktion die etwa so aussieht:
Code: Alles auswählen
def get_data():
if run == True:
[...........] #Code zum Abruf der Messdaten
root.after(0,get_data)
Ich bin allerdings mit beiden nicht wirklich zufrieden, weil zum einen immer noch meine Datenrate schwanken lassen und zum anderen nach einer Gewissen Laufzeit immer Abstürzen und folgenden Fehler liefern:
In der ersten Version wird jedes mal wenn der Plot aktualisiert wird ein neuer Thread geöffnet, das sieht etwa so aus.Tcl_AsyncDelete: async handler deleted by the wrong thread
Code: Alles auswählen
import _thread
def plot_graph():
if run == True:
[........] #Code zum Plotten der Messdaten
root.after(100,open_plot_thread)
_thread.exit()
def open_plot_thread():
_thread.start_new_thread(plot_graph,())
Code: Alles auswählen
import _thread
def plot_graph():
[........] #Code zum Plotten der Messdaten
def open_plot_thread():
_thread.start_new_thread(plot_while,())
def plot_while():
while run == True:
plot_graph()
time.sleep(0.1)
Oder sollte ich besser das Programm in zwei splitten und eins zum Abruf und Speichern der Daten nutzen und die Gespeicherten Daten dann Parallel von einem Zweiten Programm live plotten lasen?