import threading
import time
class Eat(threading.Thread):
def __init__(self, surname):
self.counter = 0
self.surname = surname
threading.Thread.__init__(self)
def run(self):
while True:
print("Hello "+self.surname)
time.sleep(1)
self.counter += 1
print("Bye "+self.surname)
begin = Eat("Cheeseburger")
begin.start()
while begin.isAlive():
print("eating...")
Während begin
wird gerade "gegessen", ich möchte "gegessen ..." drucken, aber anscheinend stecke ich auch nach 1 Sekunde in einer Endlosschleife fest. Warum stecke ich in einer Endlosschleife fest?
Antworten:
4 für die Antwort № 1Es befindet sich in einer Endlosschleife, weil Sie eine Endlosschleife ausführen:
def run(self):
while True:
Eine feste Version könnte so aussehen:
def run(self):
print("Hello "+self.surname)
time.sleep(1)
self.counter += 1
print("Bye "+self.surname)
0 für die Antwort № 2
Nun, ich bin mir bei allem anderen nicht sicher, aber du verwendest begin.start()
Anstatt von begin.run()
und unabhängig davon, begin
ist ein schrecklicher Name für eine Klasse.
läuft es mit run()
gibt diese Ausgabe:
>>>
Hello Cheeseburger
Bye Cheeseburger
und dann geht es bis unendlich weiter mit hallo ... tschüss ... hallo..bye .. immer und immer wieder ...
könnte helfen, wenn Sie eine gewünschte Ausgabe bereitstellen.
0 für die Antwort № 3
Sie haben zwei Schleifen in Ihrem Programm,
einer im thread:
while True:
print("Hello "+self.surname)
time.sleep(1)
self.counter += 1
print("Bye "+self.surname)
und eines im Hauptprogramm:
while begin.isAlive():
print("eating...")
Der Thread wird immer am Leben sein, weil Sie eine haben while true
Schleife darin, die kein Ende hat.
Auf diese Weise ist der Thread in Ihrem Hauptprogramm ebenfalls unendlich, da er immer darauf wartet, dass die Schleife im Thread beendet wird, was nicht der Fall ist.
Sie müssen entweder eine Begrenzung für die Schleife innerhalb des Threads festlegen, wie folgt:
while self.counter < 20:
print("Hello "+self.surname)
time.sleep(1)
self.counter += 1
print("Bye "+self.surname)
oder nehmen Sie die Schleife vollständig aus. Dies verhindert, dass das Hauptprogramm hängen bleibt und darauf wartet, dass die Threads-Schleife endet und beide Endlosschleifen repariert.