2
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 秒后我也陷入了无限循环。为什么我会陷入无限循环?

4

3 回答 3

4

它处于无限循环中,因为您将无限循环运行:

def run(self):
    while True:

固定版本可能如下所示:

def run(self):
    print("Hello "+self.surname)
    time.sleep(1)
    self.counter += 1
    print("Bye "+self.surname)
于 2012-08-21T10:38:41.533 回答
0

好吧..不确定其他所有内容,但是您正在使用begin.start()而不是begin.run()并且无论如何,begin这对于一个班级来说是一个可怕的名字。

运行它run()会给出以下输出:

>>> 
Hello Cheeseburger
Bye Cheeseburger

然后它继续以你好......再见......你好......再见......一遍又一遍......

如果您提供所需的输出,可能会有所帮助。

于 2012-08-21T10:39:01.793 回答
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)

或完全取出循环。这将阻止主程序卡住等待线程循环结束并修复两个无限循环。

于 2012-08-21T10:46:40.603 回答