from threading import Thread
import time
def background_task():
while not background_task.cancelled:
self.mqConn.heartbeat_tick()
time.sleep(30)
background_task.cancelled = False
t = Thread(target=background_task)
t.start()
background_task.cancelled = True
或者,您可以将timer子类化,使取消操作变得容易:
from threading import Timer
class RepeatingTimer(Timer):
def run(self):
while not self.finished.is_set():
self.function(*self.args, **self.kwargs)
self.finished.wait(self.interval)
t = RepeatingTimer(30.0, self.mqConn.heartbeat_tick)
t.start() # every 30 seconds, call heartbeat_tick
# later
t.cancel() # cancels execution
from threading import _Timer
class RepeatingTimer(_Timer):
def run(self):
while not self.finished.is_set():
self.function(*self.args, **self.kwargs)
self.finished.wait(self.interval)
t = RepeatingTimer(30.0, self.mqConn.heartbeat_tick)
t.start() # every 30 seconds, call heartbeat_tick
# later
t.cancel() # cancels execution
使用包含循环的线程
或者,您可以将timer子类化,使取消操作变得容易:
对Eric的回答的一个简短的后续说明:在python 2中,不能对
Timer
进行子类划分,因为它实际上是围绕真正类_Timer
的一个轻量级函数包装器。如果你这样做了,你会得到在this post中弹出的问题。使用
_Timer
代替修复它:相关问题 更多 >
编程相关推荐