在python中线程化无限循环

时间:2012-08-21 10:25:18

标签: 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...")

虽然begin正处于“吃”状态,但我想打印“吃......”但似乎即使在1秒后我也陷入了无限循环。为什么我会陷入无限循环?

3 个答案:

答案 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)

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