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

Python 为什么我的同步作业代码不起作用,python,multithreading,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 "refres

我已经写了下面的代码段,每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()
您还需要在
self
上设置
value
,或使用局部变量作为参数:

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

这张照片是:

>>> A().AX()
>>> refreshed : 12
请注意,
Timer()
实例将只调用一次
obj。通过
,它不会重复调用该函数

您需要在每次调用
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()

非常抱歉,我已经紧急写信了。所以我已经编辑了我的错误,请看。感谢您的帮助我应该怎么做才能让它反复调用obj.BY?@demilg:每次调用
BY
时都创建一个新计时器。我应该在哪里创建?在BY方法中?如果我在BY方法中写了它,我如何停止无限循环?你需要在问题描述中更清楚。“似乎不起作用”是什么意思?您是否收到错误,或者所发生的只是“刷新”未打印?@MartijnPieters刷新消息不会在屏幕上发出。我很高兴sorry@MartijnPieters您看到错误了吗?我在运行代码时看到
刷新
消息,但带有
值。见下面我的答案。
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()