以下程序只打印一次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秒打印一次字符串。
答案 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()