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()
4

1 回答 1

0

您还需要设置 valueon self,或使用局部变量作为参数:

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()
于 2013-03-17T13:35:35.323 回答