为什么我的同步作业代码不起作用

时间:2013-03-17 13:33:04

标签: python multithreading

我已经编写了下面的代码段来每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()

1 个答案:

答案 0 :(得分:0)

您还需要在value设置 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()