File tree Expand file tree Collapse file tree 1 file changed +19
-7
lines changed
Expand file tree Collapse file tree 1 file changed +19
-7
lines changed Original file line number Diff line number Diff line change 99import logging
1010import atexit
1111import subprocess
12+ import concurrent .futures
1213
1314class ProcessManager :
1415 """
@@ -68,20 +69,31 @@ def remove_process(self, process_id):
6869 return False
6970
7071 def terminate_all (self ):
71- """终止所有管理的进程"""
72- for process_id , process in list (self .processes .items ()):
73- if isinstance (process , int ):
74- self .terminate_by_pid (process )
75- else :
76- self .terminate_by_process (process )
72+ """并发终止所有管理的进程"""
73+ with concurrent .futures .ThreadPoolExecutor () as executor :
74+ futures = []
75+ for process_id , process in list (self .processes .items ()):
76+ if isinstance (process , int ):
77+ futures .append (executor .submit (self .terminate_by_pid , process ))
78+ else :
79+ futures .append (executor .submit (self .terminate_by_process , process ))
80+
81+ # 等待所有终止操作完成
82+ concurrent .futures .wait (futures )
7783
7884 # 清空进程字典
7985 self .processes .clear ()
8086
8187 def terminate_by_process (self , process ):
88+ if process is None :
89+ return
8290 try :
83- # 进程还在运行
8491 print (f"Terminating process: pid: { process .pid } " )
92+ if hasattr (process , 'poll' ) and process .poll () is not None :
93+ # 进程已经结束,直接返回
94+ return
95+
96+ # 进程还在运行
8597 process .terminate ()
8698 if hasattr (process , 'join' ):
8799 try :
You can’t perform that action at this time.
0 commit comments