Python: вызов функции и ожидание завершения потока (ов). - PullRequest
0 голосов
/ 26 марта 2020

Я использую Python для сценария сеанса GDB. Моя цель - запускать функцию всякий раз, когда достигается точка останова, используя gdb.events.stop.connect.

Вот мой код по сути, который я вызываю из gdb с помощью команды source main.py:

RESULT = None


def breakpoint_handler(event):
    global RESULT
    RESULT = do_something(event)  # boolean
    sleep(1)


def main():
    global RESULT
    gdb.events.stop.connect(breakpoint_handler)
    command = "some gdb command"
    gdb.execute(command)
    sleep(1)
    if RESULT:
        # do something
        pass
    else:
        # something else
        pass

main()

Этот код работает, но только благодаря вызовам sleep, которые пытаются убедиться, что вызов gdb.execute(command) на самом деле завершает sh выполнение команды gdb перед продолжением. Документации очень мало, но я предполагаю, что эта функция является многопоточной, что объясняет эффективность wait как исправления.

Есть ли способ сделать это чище, подождав, пока поток, созданный gdb.execute, завершит обработку sh, не имея доступа к телу этого метода?

1 Ответ

1 голос
/ 26 марта 2020

Вы можете установить событие внутри вашего обратного вызова и ждать его в вашем основном потоке. Вот пример с обратным вызовом, который вызывается через 5 секунд по таймеру:

import threading

def some_callback():
    event.set()

event = threading.Event()
threading.Timer(5, some_callback).start()
event.wait()
...