Ich habe ein Tkinter-Programm, das acht Klassen hat. Sechs dieser Klassen sind Seiten, daher hat jede Seite der GUI ihre eigene Klasse. Ich muss Multiprocessing über die Klassen einrichten und ich muss die Prozesse gleichzeitig beitreten. Hier ist ein Beispiel für eine Klasse und mein Multiprozessing Setup:Python & Tkinter: Multiprocessing aus mehreren Klassen
class Page1(Page):
def __init__(self, *args, **kwargs):
Page.__init__(self, *args, **kwargs)
#setting up gas varible to read from
self.gas = minimalmodbus.Instrument("COM3", 1)
self.gas.serial.baudrate = 9600
self.gas.serial.bytesize = 8
self.gas.serial.parity = serial.PARITY_NONE
self.gas.serial.stopbits = 1
self.gas.serial.timeout = 0.25
self.gas.mode = minimalmodbus.MODE_RTU
self.timer_button = tk.Button(self, text='Start', command=self.toggle)
self.timer_button.pack(side="top")
def toggle(self):
all_thread(self.gas)
def all_thread(a_gas):
thread = threading.Thread(target=all_process(a_gas))
def all_process(a_gas):
gas_list = []
gas_list.append(a_gas)
processes = []
while len(gas_list) > 0:
for sen in gas_list:
proc = Process(target=main_reader(sen))
processes.append(proc)
proc.start()
for sen in processes:
sen.join()
time.sleep(1)
def main_reader(gas_num):
read = gas_num.read_registers(0,42)
print(read)
Dies funktioniert, bekomme ich alle die Ausgabe ich in der Konsole soll. Allerdings friert meine GUI ein und stürzt ab, wenn ich die timer_button
drücke. Bin ich auf dem richtigen Weg/was mache ich falsch?
Sie sagen, Ihre GUI Freezes und stürzt ab. Haben Sie eine Fehlermeldung oder einen Trackback, den wir sehen können? –
Nun, ich habe angenommen, dass es abstürzt, weil ich die Verarbeitung falsch eingerichtet habe. Es gibt keine Ausgabe, wenn die GUI einfriert, ich muss sie mit Task-Manager schließen. Ich bin mir ziemlich sicher, dass es so ist, weil die GUI auf die Arbeit wartet, die nie stattfinden wird, weil die 'while' Schleife. – GreenSaber
versuchen Sie, eine Funktion hinzuzufügen, die den Status des Prozesses anstelle von 'Join' überprüft. – brunormoreira