2013-04-06 136 views
3

我需要運行一系列必須能夠檢查外部設置條件終止的無限循環。我認爲線程模塊可以做到這一點,但我的努力如此失敗。這裏是什麼,我試圖做一個例子:如何運行和停止python線程中的無限循環

import threading 

class Looping(object): 

    def __init__(self): 
    self.isRunning = True 

    def runForever(self): 
     while self.isRunning == True: 
      "do stuff here" 

l = Looping() 
t = threading.Thread(target = l.runForever()) 
t.start() 
l.isRunning = False 

我本來期望t.start在一個單獨的線程中運行,與L的屬性仍然可以訪問。這不是發生了什麼。我嘗試了python shell(IPython)中的上述代碼片段。在實例化後立即執行t start,並阻止任何進一步的輸入。 顯然,我對線程模塊並不瞭解。 有關如何解決問題的任何建議?

回答

7

您打電話runForever太早。無括號使用target = l.runForever

函數調用直到其參數後才被計算。當你編寫runforever()時,它甚至在創建線程之前就調用該函數。只需傳遞runForever即可傳遞函數對象本身,線程設備可以在準備就緒時調用它。要點是實際上並不想打電話runForever;你只是想告訴線程代碼runForever是什麼應該稍後調用。

+0

啊,parens。他們仍然絆倒我(我的Python使用經驗還不到一個月)。謝謝 – stefano 2013-04-06 14:20:04