/ / Threading Endlosschleife in Python [geschlossen] - Python, Multithreading

Threading-Endlosschleife in Python [geschlossen] - Python, Multithreading

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 № 1

Es 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.