在线程中运行子进程并停止它



我试图运行一个python文件与另一个python文件在线程与子进程。我可以运行这个文件,但是不能停止它。

我想要的是

我想运行test.py和我的main.py线程,并通过在控制台中输入stop来停止它。

test.py

import time
while True:
print("Hello from test.py")
time.sleep(5)

main.py

import subprocess
import _thread
processes = []
def add_process(file_name):
p = subprocess.Popen(["python", file_name], shell=True)
processes.append(p)
print("Waiting the process...")
p.wait()
while True:
try:
# user input
ui = input("> ")
if ui == "start":
_thread.start_new_thread(add_process, ("test.py",))
print("Process started.")
elif ui == "stop":
if len(processes) > 0:
processes[-1].kill()
print("Process killed.")
else:
pass
except KeyboardInterrupt:
print("Exiting Program!")
break

输出
C:usersme>python main2.py
> start
Process started.
> Waiting the process...
Hello from test.py, after 0 seconds
Hello from test.py, after 4 seconds
> stop
Process killed.
> Hello from test.py, after 8 seconds
Hello from test.py, after 12 seconds

> stopHello from test.py, after 16 seconds
Process killed.
> Hello from test.py, after 20 seconds
>

程序仍在运行,即使我用kill函数停止它,我也尝试过terminate。我需要停止它,我怎么能。或者,是否有任何替代模块的子进程来做这个?

我怀疑您刚刚启动了多个进程。如果您将停止代码替换为以下代码:

for proc in processes:
proc.kill()

这应该把他们都杀了。

注意你是在windows上,在windows上terminate()kill()的别名。无论如何,依靠无优雅地终止进程不是一个好主意,如果你需要停止你的test.py,你最好有一些与它通信的方法,让它优雅地退出。

顺便说一句,你不需要shell=True,threading_thread更好。

最新更新