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...")
虽然begin
正处于“吃”状态,但我想打印“吃......”但似乎即使在1秒后我也陷入了无限循环。为什么我会陷入无限循环?
答案 0 :(得分:4)
它处于无限循环中,因为你将无限循环置于run:
def run(self):
while True:
固定版本可能如下所示:
def run(self):
print("Hello "+self.surname)
time.sleep(1)
self.counter += 1
print("Bye "+self.surname)
答案 1 :(得分:0)
嗯..不确定其他所有内容,但您使用的是begin.start()
而不是begin.run()
,无论如何,begin
对于一个班级来说都是一个可怕的名字。
使用run()
运行它会产生以下输出:
>>>
Hello Cheeseburger
Bye Cheeseburger
然后它继续无限,你好......再见......你好......一遍又一遍......
如果您提供所需的输出,可能会有所帮助。
答案 2 :(得分:0)
你的程序中有两个循环,
线程中的一个:
while True:
print("Hello "+self.surname)
time.sleep(1)
self.counter += 1
print("Bye "+self.surname)
和主程序中的一个:
while begin.isAlive():
print("eating...")
线程将始终处于活动状态,因为它内部有一个while true
循环,没有结束。
因此主程序中的线程也将是无限的,因为它总是在等待线程中的循环完成,它不会。
你必须对线程中的循环施加限制,如下所示:
while self.counter < 20:
print("Hello "+self.surname)
time.sleep(1)
self.counter += 1
print("Bye "+self.surname)
或完全取出循环。 这将阻止主程序等待线程循环结束并修复两个无限循环。