在 python 中杀死一个线程
killing a thread in python
下面是我试图在 python 中实现的代码片段。我正在尝试从其他函数在目标函数上生成一个新线程。这个新线程等待子进程并退出。现在我想在收到请求时终止该线程。这也应该终止它正在执行的相应子进程。
class ABC(object):
def process_thread(self):
#call a child process using subprocess.call()
def main(self):
t = threading.Thread(target=self.process_thread)
t.start()
obj = ABC()
obj.main()
我通常让新线程检查全局变量或队列中传递的值,然后当它看到关闭线程的指示器时 运行:
sys.exit()
它强制线程关闭。
添加:
您将在要关闭的线程中使用 sys.exit()
这对线程模块很有用。
线程模块有一个 thread.exit() 调用,但看起来您正在使用线程。
您的实际用例有一个非常简单的解决方案:使用 subprocess.Popen
生成外部进程。然后,从 Python.
监视和控制进程
p = suprocess.Popen(...)
# ... some time later
p.kill()
这是一种方法。
不需要线程。
下面是我试图在 python 中实现的代码片段。我正在尝试从其他函数在目标函数上生成一个新线程。这个新线程等待子进程并退出。现在我想在收到请求时终止该线程。这也应该终止它正在执行的相应子进程。
class ABC(object):
def process_thread(self):
#call a child process using subprocess.call()
def main(self):
t = threading.Thread(target=self.process_thread)
t.start()
obj = ABC()
obj.main()
我通常让新线程检查全局变量或队列中传递的值,然后当它看到关闭线程的指示器时 运行:
sys.exit()
它强制线程关闭。
添加: 您将在要关闭的线程中使用 sys.exit() 这对线程模块很有用。
线程模块有一个 thread.exit() 调用,但看起来您正在使用线程。
您的实际用例有一个非常简单的解决方案:使用 subprocess.Popen
生成外部进程。然后,从 Python.
p = suprocess.Popen(...)
# ... some time later
p.kill()
这是一种方法。
不需要线程。