Threading.Timer()
Мне нужно написать программу в сетевом курсе, что-то вроде выборочного повтора, но нужен таймер. после поиска в google я обнаружил, что 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
Я не могу понять, в чем проблема!
может кто-нибудь мне помочь?
Ответы
Ответ 1
Вам просто нужно поместить аргументы в hello
в отдельный элемент вызова функции, например,
t = threading.Timer(10.0, hello, [h])
Это общий подход в Python. В противном случае, когда вы используете Timer(10.0, hello(h))
, результат этого вызова функции передается на Timer
, который равен None
, поскольку hello
не делает явного возврата.