传递一个类实例的Twisted callLater

时间:2016-03-26 21:07:09

标签: python asynchronous twisted

当我这样做时

reactor.callLater(5, my_func, self)

传递给my_func的对象不是我称之为callLater的自我。它们具有不同的地址(通过print(self)和print(my_arg)验证)。

我在这里缺少什么?有办法吗?     my_func,并将(classObj) 看到发送的实际实例?

我的目的是建立一个延迟检查,以确定自己的某个属性是否已经设定。我可以用不同的方式做事(实际上已经有了),但有关情况的事情并没有说得对,所以我想我会为将来的应用做些澄清。

1 个答案:

答案 0 :(得分:0)

确实有些东西闻不对劲。以下代码按预期工作,传入的变量具有相同的地址。

from twisted.internet import reactor

def verify(obj):
    """ Check whether the value variable has been set or not.
    """
    if obj.value:
        print('Value was set')
    else:
        print('Value was not set')

def compare(A, B):
    """ Compare obj A == B
    """
    if A == B:
        print('Objects are the same')
    else:
        print('Objects are not the same')


class txClass:
    value = None

    def verify(self):
        reactor.callLater(5, verify, self)

    def compare(self, obj):
        reactor.callLater(5, compare, self, obj)


A = txClass()
A.verify()          # verify obj.value is set
A.value = 'test'

B = txClass()
A.compare(A)        # compare same obj
A.compare(B)        # compare diff obj
reactor.run()