定时器只在python

时间:2016-11-30 15:13:01

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

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


                       (program - 1)

但是以下程序每5秒打印一次字符串。

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

foo();

                        (program - 2)

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

2 个答案:

答案 0 :(得分:1)

(program - 2)每5秒打印一个字符串,因为它以递归方式调用自身。如您所见,您在其自身内部调用foo()函数,这就是原因,因为它可以正常工作。

如果你想使用你可以上课的(程序-1)每隔5秒打印一个字符串(但这不是一个好习惯!):

from threading import Timer

class TestTimer:
    def boo(self):
        print("World")
        Timer(1.0, self.boo).start()

timer = TestTimer()
timer.boo()

答案 1 :(得分:0)

正如已经指出的那样,你以递归方式调用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()