Skip to content

Commit 82d42db

Browse files
committed
提升退出时清理性能
1 parent 455d420 commit 82d42db

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

backend/tools/process_manager.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import logging
1010
import atexit
1111
import subprocess
12+
import concurrent.futures
1213

1314
class 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:

0 commit comments

Comments
 (0)