我必须在网络课程中编写一个程序,类似于选择性重复,但需要一个计时器。在谷歌搜索后,我发现threading.Timer可以帮助我,我编写了一个简单的程序来测试threading.Timer的工作原理:
import threading def hello(): print "hello, world" t = threading.Timer(10.0, hello) t.start() print "Hi" i=10 i=i+20 print i
该程序正常运行。但是当我尝试以给参数的方式定义hello函数时:
import threading def hello(s): print s h="hello world" t = threading.Timer(10.0, hello(h)) t.start() print "Hi" i=10 i=i+20 print i
输出是:
hello world Hi 30 Exception in thread Thread-1: Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 522, in __bootstrap_inner self.run() File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 726, in run self.function(*self.args, **self.kwargs) TypeError: 'NoneType' object is not callable
我不明白是什么问题!谁能帮我?
您只需要将参数hello放入函数调用中的单独项中,就像这样,
hello
t = threading.Timer(10.0, hello, [h])
这是Python中的常用方法。否则,当您使用时Timer(10.0, hello(h)),此函数调用的结果将传递到Timer,None因为hello这不会显式返回。
Timer(10.0, hello(h))
Timer
None