Есть ли способ запретить экземплярам классов вызывать друг друга? - PullRequest
0 голосов
/ 28 мая 2020

У меня есть несколько экземпляров класса, которые вызывают функции друг друга. У меня также есть система, которая определяет, слишком ли долго эти функции вызывают друг друга (чтобы избежать переполнения стека). Однако, когда он обнаруживает это, он ничего не может сделать, чтобы остановить их, поэтому они просто продолжают работать, пока не достигнут предела рекурсии. Вот более простой пример:

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 

Есть ли способ фактически остановить бесконечную работу этих функций и достичь предела рекурсии? Если нет, я полагаю, я попытаюсь добавить переменную к каждому классу, указывающую, следует ли им продолжать работу или нет.

1 Ответ

1 голос
/ 29 мая 2020

Действительно, это типичная проблема с рекурсией. В коде должно быть условие для остановки рекурсии. Самый простой - ввести параметр глубины:

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, конечно, зависит от вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...