python采用什么执行方式_在Python中每隔x秒重复执行函数的最佳方法是什么?

如果您想要一种非阻塞的方式周期性地执行您的函数,而不是阻塞无限循环,我将使用线程计时器。这样,您的代码就可以继续运行并执行其他任务,并且仍然每n秒钟调用一次函数。我经常使用这种技术来打印长时间、CPU/磁盘/网络密集型任务的进度信息。

下面是我在类似问题中发布的代码,使用start()和top()控件:from threading import Timerclass RepeatedTimer(object):

def __init__(self, interval, function, *args, **kwargs):

self._timer = None

self.interval = interval

self.function = function

self.args = args

self.kwargs = kwargs

self.is_running = False

self.start()

def _run(self):

self.is_running = False

self.start()

self.function(*self.args, **self.kwargs)

def start(self):

if not self.is_running:

self._timer = Timer(self.interval, self._run)

self._timer.start()

self.is_running = True

def stop(self):

self._timer.cancel()

self.is_running = False

用法:from time import sleepdef hello(name):

print "Hello %s!" % nameprint "starting..."rt = RepeatedTimer(1, hello, "World") # it auto-starts, no need of rt.start()try:

sleep(5) # your long-running job goes here...finally:

rt.stop() # better in a try/finally block to make sure the program ends!

特征:标准库,没有外部依赖关系

start()和

stop()即使计时器已经启动/停止,也可以多次调用。

函数可以有位置参数和命名参数。

你可以改变

interval任何时候,它将在下一次运行后生效。同为

args, kwargs甚至

function!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值