Использование трассировки Python для передачи сигналов на методы более высокого уровня - PullRequest
1 голос
/ 17 февраля 2012

Я строю сервер, на котором я хотел бы, чтобы функции низкого уровня передавали функции более высокого уровня, вызывая их снова.Например:

def bar():
    print('hello')
    #run blah() again

def foo():
    bar()

def blah():
    foo()

blah()

Использование методов traceback.extract_stack () или inspect.stack (), которые распечатывают прошлые вызовы функций, приближаются к тому, что я ищу, а именно к тому, что, когда я добираюсь до bar (), Я хотел бы знать, что изначально я вызвал blah (), чтобы все это началось.Тем не менее, я не могу найти способ снова вызвать blah ().Между прочим, я понимаю, что вышеупомянутое будет круговым, просто пример.

Я также хочу избежать передачи каких-либо аргументов обратно через функции - я надеюсь, что есть какой-нибудь трюк traceback / inspect / trace, который будет отслеживать этовсе для меня.

@ ThomasK, немного больше информации о том, что я собираюсь сделать (возможно, я думаю об этом совершенно неправильно): 1) У меня есть сервер, который извлекает информацию из различных источников(т. е. корни), выполняет кучу вычислений, а затем отправляет конечные точки данных (т. е. оставляет) клиентам, которые его запрашивают. 2) Клиенты инициируют запрос для запуска, говоря: «Я хочу X, Y, Z» изатем ленивый сервер идет и получает его 3) впоследствии сервер отслеживает корни, и когда любой из «корней» изменяется, он автоматически вытягивает все затронутые «листья», отправляя обновления клиентам.В приведенном выше упрощенном примере bar () - это корень, blah () - это лист, который отправляет данные клиентам.

Чтобы сделать будущую разработку более гибкой, я бы предпочел не кодировать что-либо жестко, ипридерживайтесь основной предпосылки: «Хорошо, когда ваши данные изменятся, немедленно идите и скажите всем, чтобы они повторно запрашивали свои данные».Возможно, есть шаблон, который заключает в себе это.

...