Python 3.x 在python中,计时器只运行一次
下面的程序只打印hello world一次,而必须每5秒打印一次字符串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!!!
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()
你为什么要在一节额外的课上开始呢?这有必要吗?