Ich lerne Python zum Spaß und was ich hier erreichen möchte, ist ein Programm, das ständig Benutzer zur Eingabe durch eine While True
Schleife fragt, während noch andere Skripte auf Hintergrund laufen (Vom Benutzer ausgewählt).Python: Ausführen eines Threads während der Benutzereingabe
Was ich zur Zeit habe funktioniert gut ... Aber nicht genau so, wie ich es wollte. Es nimmt die Eingaben des Benutzers und startet Threads wie gefragt, hält sie jedoch an, während er auf die nächste Eingabe des Benutzers wartet. Dann wird gedruckt, was mein Thread jede Sekunde drucken soll, aber nur einmal nach dem nächsten Druck der Konsole.
Ich benutze IDLE, um meinen Code regelmäßig zu testen, vielleicht könnte das helfen.
Haupt Skript:
from mythreadclass import MyThread
while True:
user_input = input("What do I do ? ")
if user_input == "start thread":
#Will start a threat that prints foo every second.
mythread = MyThread()
mythread.start()
elif user_input == "hello":
print("Hello !")
else:
print("This is not a correct command.")
Thread-Klasse:
import time
from threading import Thread, Timer
class MyThread(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
print("Thread started !")
while True:
self.foo()
time.sleep(1)
def foo(self):
print("foo !")
Was habe ich, wenn Ausführung:
What do I do ?
>>> start thread
Thread started !
What do I do ?
>>> hello
foo !Hello !
>>> hello
foo !Hello !
Wie Sie sehen können, sollte der Thread jede Sekunde foo!
drucken, während der Benutzer noch nach der nächsten Eingabe gefragt wird. Stattdessen startet es den Thread und druckt foo !
nur, wenn der Benutzer etwas eingibt: Eingabe pausiert/blockiert den Thread.
Ich weiß nicht, ob das, was ich klar erreichen wollen ist so hier ist es:
What do I do ?
>>> start thread
Thread started !
What do I do ?
foo !
foo !
foo !
#User waited 3 seconds before typing hello so there should be 3 foos
>>> hello
Hello !
What do I do ?
foo !
foo !
etc etc.
ich geändert, dass '' input' zu raw_input' und es scheint alles wie erwartet zu funktionieren. Und ich lege alles in eine Datei. – sal
Die Art, wie Sie es hier geschrieben haben, funktioniert perfekt für mich in Python 3.5. Ist das genau das, was du geschrieben hast oder ein Beispiel? –
@JustinBell Es ist ein _ (sehr) _ vereinfachtes Beispiel, aber mein gesamtes Projekt ist global das gleiche (Eine Hauptklasse, die einen Thread in eine andere Datei umwandelt) – sohomangue