Python 3.x 在python中,计时器只运行一次

Python 3.x 在python中,计时器只运行一次,python-3.x,Python 3.x,下面的程序只打印hello world一次,而必须每5秒打印一次字符串 from threading import Timer; class TestTimer: def __init__(self): self.t1 = Timer(5.0, self.foo); def startTimer(self): self.t1.start(); def foo(self): print("Hello, World!!!

下面的程序只打印hello world一次,而必须每5秒打印一次字符串

from threading import Timer;

class TestTimer:

    def __init__(self):
        self.t1 = Timer(5.0, self.foo);

    def startTimer(self):
        self.t1.start();

    def foo(self):
        print("Hello, World!!!");

timer = TestTimer();
timer.startTimer();


                       (program - 1)
def foo():
    print("World");
    Timer(5.0, foo).start();

foo();

                        (program - 2)
但是下面的程序每5秒打印一次字符串

from threading import Timer;

class TestTimer:

    def __init__(self):
        self.t1 = Timer(5.0, self.foo);

    def startTimer(self):
        self.t1.start();

    def foo(self):
        print("Hello, World!!!");

timer = TestTimer();
timer.startTimer();


                       (program - 1)
def foo():
    print("World");
    Timer(5.0, foo).start();

foo();

                        (program - 2)
为什么(程序-1)不每5秒打印一次字符串?。以及如何使(程序-1)连续每5秒打印一次字符串。

(程序-2)每5秒打印一次字符串,因为它正在递归地调用自己。正如您所看到的,您可以在函数本身内部调用
foo()
函数,这就是它工作的原因

如果您想使用类在(程序-1)中每隔5秒打印一个字符串,您可以(但这不是一个好的实践!):


如前所述,您正在递归调用
foo()

def foo():
    print("World");
    Timer(5.0, foo).start();  # Calls foo() again after 5s and so on

foo();
在您的问题中,您已经围绕
threading.Timer
创建了一个包装器-我建议您只需将其子类化:

from threading import Timer

class TestTimer(Timer):

    def __init__(self, i):
        self.running = False
        super(TestTimer, self).__init__(i, self.boo)

    def boo(self):
        print("Hello World")

    def stop():
        self.running = False
        super(TestTimer, self).stop()

    def start():
        self.running = True
        while self.running:
            super(TestTimer, self).start()

t = TestTimer(5)
t.start()

你为什么要在一节额外的课上开始呢?这有必要吗?