我正在使用多处理模块进行并行处理。
下面的代码片段在 X 位置搜索字符串文件名并返回找到该字符串的文件名。
但在某些情况下,搜索过程需要很长时间,所以我试图杀死搜索过程,花费超过 300 秒。为此,我使用了 timeout == 300 ,如下所示,这会杀死搜索过程,但不会杀死孩子通过以下代码处理spawn。
我尝试找到多种方法但没有成功:/
如何从池中杀死父进程及其子进程?
import os
from multiprocessing import Pool
def runCmd(cmd):
lresult = os.popen(cmd).read()
return lresult
main ():
p = Pool(4)
data_paths = [list of paths of store data]
search_cmds = [ "SearchText.exe %s < %s"%(data_path, filename) for data_path in data_paths ]
results = [p.apply_async(runCmd, (cmd,), callback = log_result) for cmd in search_cmds]
try:
for result in results:
root.append(result.get(timeout=300))
#rool holds the result of search process
except TimeoutError:
for c in multiprocessing.active_children():
print '----->',c.pid
os.kill(c.pid, signal.SIGTERM)
p.close()
p.join()
if __name__ == '__main__':
main()
Process Explorer 中的进程树:
cmd.exe
------python.exe
----------------python.exe
--------------------------cmd.exe
---------------------------------SearchText.exe
----------------python.exe
--------------------------cmd.exe
---------------------------------SearchText.exe
----------------python.exe
--------------------------cmd.exe
---------------------------------SearchText.exe
----------------python.exe
--------------------------cmd.exe
---------------------------------SearchText.exe
上面的代码片段不会杀死子进程
--------------------------cmd.exe
---------------------------------SearchText.exe
--------------------------cmd.exe
---------------------------------SearchText.exe
--------------------------cmd.exe
---------------------------------SearchText.exe
--------------------------cmd.exe
---------------------------------SearchText.exe
这些子进程会被保留,这些子进程也会被杀死。
请公会。
Thanks
我能够使用 psutil 模块解决我的问题
在下面的帖子中找到了解决方案:
import psutil, os
def kill_proc_tree(pid, including_parent=True):
parent = psutil.Process(pid)
for child in parent.get_children(recursive=True):
child.kill()
if including_parent:
parent.kill()
me = os.getpid()
kill_proc_tree(me)
https://stackoverflow.com/a/4229404/420557 https://stackoverflow.com/a/4229404/420557
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)