Подтвердить что ты не робот

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

Я не могу понять, в чем проблема! может кто-нибудь мне помочь?

4b9b3361

Ответ 1

Вам просто нужно поместить аргументы в hello в отдельный элемент вызова функции, например,

t = threading.Timer(10.0, hello, [h])

Это общий подход в Python. В противном случае, когда вы используете Timer(10.0, hello(h)), результат этого вызова функции передается на Timer, который равен None, поскольку hello не делает явного возврата.