更改此计时器功能以接受参数

时间:2017-08-19 04:18:43

标签: python python-3.x timer

我在python ver3.6中有这个工作计时器功能,它以2秒的间隔运行。

def timer_function_working():
    threading.Timer(2, timer_function_working).start()
    print ("stackoverflow")

timer_function_working()

我希望这个timer_function接受时间间隔作为参数。这是新代码;

def timer_function(interval_sec):
    threading.Timer(interval_sec, timer_function).start()
    print ("stackoverflow")

timer_function(interval_sec=2)

但是,我收到此错误消息;

TypeError: timer_function() missing 1 required positional argument: 'interval_sec'

如何更改此计时器功能以接受参数?

1 个答案:

答案 0 :(得分:1)

根据docs for threading.TimerTimer的第一个参数是interval

  

class threading.Timer(interval, function, args=[], kwargs={})

在第二个代码块中,第一次执行没有问题,因为您已为interval提供了值。但是,在function的持续时间结束时调用Timer时,您不会将任何参数传递给函数本身,从而导致错误:

TypeError: timer_function() takes exactly 1 argument (0 given)

您可以通过以下方式将参数传递给Timer在完成时调用的函数:

import threading


def timer_function(interval_sec):
    threading.Timer(interval_sec, timer_function, args=[interval_sec]).start()
    print ("stackoverflow")


timer_function(interval_sec=2)

或者,您可以使用闭包将值interval_sec绑定到timer_function中定义的另一个函数,该函数可以在没有任何参数的情况下调用:

def timer_function(interval_sec):
    def inner_function():
        return timer_function(interval_sec)
    threading.Timer(interval_sec, inner_function).start()
    print ("stackoverflow")


timer_function(interval_sec=2)