Python:调用函数并等待其线程完成

Python:调用函数并等待其线程完成,python,gdb,python-multithreading,Python,Gdb,Python Multithreading,我正在使用Python编写gdb会话的脚本。我的目标是在遇到断点时使用gdb.events.stop.connect运行函数 下面是我的代码,我通过运行source main.py从gdb调用它: RESULT = None def breakpoint_handler(event): global RESULT RESULT = do_something(event) # boolean sleep(1) def main(): global RESU

我正在使用Python编写gdb会话的脚本。我的目标是在遇到断点时使用
gdb.events.stop.connect
运行函数

下面是我的代码,我通过运行
source main.py
从gdb调用它:

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)
调用在继续之前实际完成gdb命令的执行。只有很少的文档,但我猜这个函数是线程化的,这解释了
wait
作为修复的有效性


有没有一种方法可以让它更干净,方法是等待由
gdb.execute
创建的线程完成处理,而无需访问此方法的主体?

您可以在回调中设置一个事件,然后在主线程中等待它。下面是一个示例,计时器在5秒后调用回调:

import threading

def some_callback():
    event.set()

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

@Paupulaz“事件”和“evt”?那是什么困扰你?真的吗?ahaha@borislipschitz很抱歉,我想更正代码之外的导入语句,但需要修改更多内容,以便提交编辑,并且没有太多其他需要更改的内容。@paupulaz,lol,我甚至没有注意到导入超出了代码部分。无论如何,使用事件,不要使用任意睡眠:-)