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

慕雪6442864

如果您想要一种非阻塞的方式周期性地执行您的函数,而不是阻塞无限循环,我将使用线程计时器。这样,您的代码就可以继续运行并执行其他任务,并且仍然每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、付费专栏及课程。

余额充值