2013-05-16 61 views
19

我必須在網絡課程中編寫一個類似於選擇性重複但需要定時器的程序。在谷歌搜索後,我發現,threading.Timer能幫助我,我寫了一個簡單的程序,只是爲了試驗如何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 

我無法理解是什麼問題! 任何人都可以幫助我嗎?

回答

47

你只需把參數hello到一個單獨的項目在函數調用,這樣,

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

這是Python中的常用方法。否則,當您使用Timer(10.0, hello(h))時,此函數調用的結果將傳遞到Timer,即None,因爲hello不會做出明確的返回。

+0

非常感謝:) – sandra