有什么办法可以阻止类实例之间的相互调用?

问题描述 投票:0回答:1

我有多个类实例,它们互相调用对方的函数。我还有一个系统,可以检测这些函数是否相互调用时间过长(以避免堆栈溢出)。然而,当它检测到这一点时,它没有办法真正停止它们,所以它们就一直运行,直到达到递归极限。这是一个更简单的例子。

class test: 
    def activateOther(self, other):
        sleep(2)
        print('Activated Other Function', id(self))
        other.activateOther(self)

t = test()
t_ = test()
t.activateOther(t_)

del t, t_  # Even after deleting the variables/references, they continue running 

有没有办法让这些函数不再无休止地运行 并达到递归极限?如果没有,我想我会尝试在每个类中添加一个变量来指示它们是否应该继续运行。

python python-3.x class garbage-collection instance
1个回答
1
投票

的确,这是一个典型的递归问题。在代码中必须有一个条件,什么时候停止递归。最简单的就是引入一个深度参数。

class test: 
    def activateOther(self, other, depth=0):
        if depth > 88:
            return
        sleep(2)
        print('Activated Other Function', id(self))
        other.activateOther(self, depth + 1)

t = test()
t_ = test()
t.activateOther(t_)

实际的条件,以及是否 depth 计数器就可以了,当然这取决于你的应用。

© www.soinside.com 2019 - 2024. All rights reserved.