2013-05-16 56 views
0

線程是非常新的,就像現在一個小時,但我需要它用於我的代碼。我學會了足夠的使用線程在我的情況下,但我很難從如何獲得我的函數返回輸出。返回函數被調用時的線程錯誤

這是我的線程調用

threading.Thread(target = self.PageCollectionProcess(option)).start() 

當我嘗試返回我得到的輸出

TypeError: 'list' object is not callable 
File "/usr/lib/python2.7/threading.py", line 524, in __bootstrap 
    self.__bootstrap_inner() 
File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner 
    self.run() 
File "/usr/lib/python2.7/threading.py", line 504, in run 
    self.__target(*self.__args, **self.__kwargs) 

回答

1

好像你是在一個錯誤的方式調用Thread

threading.Thread(target = self.PageCollectionProcess(option)).start() 

應該是:

threading.Thread(target=self.PageCollectionProcess, args=(option,)).start() 

認爲這樣 - 在一個非常粗俗的泛化中,線程有點延遲加載;你告訴一個線程要執行什麼(一個函數和它的參數)並且線程稍後運行它。

+0

延遲加載,這是迄今爲止最好的解釋。謝謝你 – Crispy

+0

,但你如何得到返回,'results = threading.Thread(target = self.PageCollectionProcess,args =(option,)).start()'不起作用。 – Crispy

+0

@Crispy不能只是調用一個函數並在多線程環境中獲取返回值。有一些線程間通信的工具,比如'Queue','Event','Lock' ..在python的'Threading'模塊中。你也可以在一個單獨的線程中運行一些東西,並等待線程完成(通過'thread.join()'),但是這會阻塞調用線程。 – thkang