我有一个Python进程,它从一个单独的线程产生另一个进程,例如
class MyClass(unittest.TestCase):
def setup(self):
def spawn_proc():
subprocess.call("test_process")
thread = threading.Thread(target=spawn_proc, args=(), daemon=True)
thread.start()
def cleanup(self):
# @@@ kill test_process
所以调用MyClass.setup()
意味着test_process
将在第二个帖子中生成。
我想要的是从第一个线程中杀死test_process
的方法。我已尝试在spawn_proc()
中保存对该流程的引用,但由于在第二个帖子中执行了spawn_proc()
,因此第一个流程无法访问。
最好的方法是什么?或者这种做法是不正确的?
做什么工作是另一个调用subprocess
从操作系统查找PID,然后再调用kill,但我不确定是否有更好的方式。
答案 0 :(得分:3)
问题是subprocess.call()
没有返回任何线程句柄。它是一种同步方法(仅在被调用程序终止时返回)。
而是使用subprocess.Popen()
:
def setup(self):
self.proc = subprocess.Popen("test_process")
def cleanup(self):
self.proc.kill()
您不仅可以获得句柄,还可以完全避免使用threading
模块。
有关Popen
的更多详细信息(例如,如何与流程进行通信):
https://docs.python.org/2/library/subprocess.html#popen-constructor