Python : 调用函数并等待其线程完成
Python : call a function and wait for its thread(s) to finish
我正在使用 Python 编写 gdb 会话脚本。我的目标是 运行 每当遇到断点时使用 gdb.events.stop.connect
.
函数
本质上这是我的代码,我通过 运行ning 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()
我正在使用 Python 编写 gdb 会话脚本。我的目标是 运行 每当遇到断点时使用 gdb.events.stop.connect
.
本质上这是我的代码,我通过 运行ning 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()