Hier ist ein Beispielcode,
Code: Select all
def threads_(title, index):
#Create and process .Bat
with open('test'+str(index)+'.bat', "w", encoding='utf-8') as a: a.write('executable_program.py -start_test "'+title+'"')
p1 = subprocess.Popen('test'+str(index)+'.bat', stdout=subprocess.PIPE, text=True)
try:
while p1.poll() is None:
time.sleep(0.5)
_output = p1.stdout.readline()
except KeyboardInterrupt as e:
#Cleanup on Exit
print('Closing ...')
for c in psutil.Process(p1.pid).children(recursive=True): c.kill()
psutil.Process(p1.pid).kill()
print('Cleanup Done')
os.remove('test'+str(index)+'.bat')
quit()
def start_threads():
remaining = ['thread_test1', 'thread_test2', 'thread_test3']
Globals.thread1 = [Globals.thread1.append(None) for index in range(0, 3)]
for index in range(0, 3):
Globals.thread1[index] = threading.Thread(name='thread' + str(index), target=threads_, args=(remaining[index], index))
Globals.thread1[index].start()
start_threads()
Ich kann auch nicht die Funktion „join()“ verwenden, wenn ich die Threads starte.
Bearbeiten
Ich habe die Frage mit einem Beispiel aktualisiert,
Der folgende Code funktioniert mit einem tkinter root.mainloop() ... aber er funktioniert nur in 40 % der Fälle. Beim Beenden werden nicht immer die handler_stop_signals ausgelöst
Code: Select all
def handler_stop_signals(signum, frame):
print("Hello world")
def main_thread():
Globals.root = tk.Tk()
Globals.root.geometry("+{}+{}".format(650, 50))
Globals.root.geometry("{}x{}".format(200, 200))
Globals.root.mainloop()
signal.signal(signal.SIGINT, handler_stop_signals)
signal.signal(signal.SIGTERM, handler_stop_signals)
main_thread()
Mobile version