我有一个运行两个线程的Tkinter GUI,GUI的主线程和一个工作线程。工作线程使用以下代码创建子进程:
myProcess = subprocess.Popen(['python', '-u', 'runTests.py'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)文件runTests.py执行一些设置,然后使用以下命令运行单元测试文件:
execfile('myUnitTests.py')文件myUnitTests.py有几个单元测试,有些单元测试需要5分钟以上的时间才能运行。在GUI中,我单击一个按钮以停止运行测试。这反过来会使工作线程发送一个信号来停止该子进程:
myProcess.terminate()terminate命令不会立即停止进程,它会等待当前单元测试完成运行,然后终止进程?我尝试过使用os.kill,但我得到了与terminate()相同的结果。
你知道如何让我的程序更有响应性,这样它就会立即杀伤子进程吗?
发布于 2010-07-22 07:36:55
Python文档[ http://docs.python.org/library/signal.html ]说:
因此,如果您的五分钟单元测试正在执行“完全用C实现的冗长计算”,并且您的单元测试工具为SIGTERM安装了一个处理程序,那么这就是您的问题。如果是这样的话,尝试使用myProcess.kill而不是myProcess.terminate (或者,如果您还没有使用2.6,则使用myProcess.send_signal(9))。SIGKILL是无法从用户空间捕获的,应该会立即生效。
警告:任何应该在退出单元测试框架时运行的清理操作都将不会执行。
https://stackoverflow.com/questions/3302910
复制相似问题