2013-03-17 155 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

相关问题