我在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'
如何更改此计时器功能以接受参数?
答案 0 :(得分:1)
根据docs for threading.Timer
,Timer
的第一个参数是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)