我正在围绕主程序调用编写诊断包装。该程序依赖于多处理和线程。我想在主程序调用周围放置一个超时包装程序,以便可以记录超时事件,但是对于函数超时方法Timeout on a function call而言,当前答案不是一个明确的答案,如果它们是线程安全的。我目前认为最安全的方法是基于多进程答案,但是使用psutil
来清理所有子进程
if __name__ == '__main__':
# Start bar as a process
p = multiprocessing.Process(target=main)
p.start()
# Wait for 10 seconds or until process finishes
p.join(10)
p_main = psutil.Process()
for child in p_main.children(recursive=True):
child.terminate()
或根据https://psutil.readthedocs.io/en/latest/#kill-process-tree
处的reap_children
方法进一步扩展此功能。