2013-03-17 193 views
0

我在下面寫了代碼段來每2秒啓動一次函數。但是,它似乎不是工作。爲什麼?爲什麼我的同步作業代碼不起作用

from threading import Timer 

class A : 
    value = None 
    def AX(self): 
     value = 12 
     obj = B() 
     Timer(1,obj.BY, [self.value]).start() 
class B: 
    def BY(self,value): 
     print "refreshed :", value 

if __name__=='__main__': 
    obj = A() 
    obj.AX() 
+0

你需要在你的問題的描述更清晰。 「似乎不行」是什麼意思?你是否得到錯誤或者是發生了什麼是'刷新'不打印? – 2013-03-17 13:40:45

+0

@MartijnPieters刷新的消息不會在屏幕上發出。我很抱歉 – demilg 2013-03-17 13:41:35

+0

@MartijnPieters你看到錯誤嗎? – demilg 2013-03-17 13:47:05

回答

0

您還需要設置valueself,或使用局部變量作爲參數:

def AX(self): 
    self.value = 12 
    obj = B() 
    Timer(1, obj.BY, [self.value]).start() 

或:

def AX(self): 
    value = 12 
    obj = B() 
    Timer(1, obj.BY, [value]).start() 

此打印:

>>> A().AX() 
>>> refreshed : 12 

請注意,Timer()實例只會調用obj.BY一次,它不會重複調用該函數。

您需要復位定時器每次BY被調用來做到這一點:

class B: 
    def BY(self,value): 
     print "refreshed :", value 
     Timer(2, self.BY, [value]).start() 

這將創建循環。如果你需要循環在某些時候終止,則需要單獨測試該條件,在BY

class B: 
    somecondition = False 

    def BY(self,value): 
     print "refreshed :", value 
     if self.somecondition: 
      return # do not set the timer again 
     Timer(2, self.BY, [value]).start() 
+0

很抱歉,我急用。所以我編輯了我的錯誤,請看。感謝您的幫助 – demilg 2013-03-17 13:38:31

+0

我該怎麼做才能重複調用obj.BY? – demilg 2013-03-17 13:50:50

+0

@demilg:每次調用BY時創建一個新的定時器。 – 2013-03-17 13:52:40

相關問題