From 81eed99a032b97eec105a3bf749c7977513487f0 Mon Sep 17 00:00:00 2001 From: zpff Date: Thu, 14 Aug 2025 17:37:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=AD=A3=E7=A1=AE=E7=BB=88=E6=AD=A2?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=EF=BC=88=E7=96=91=E4=BC=BC=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http_server.py | 18 +++++++++++++++++- main.py | 3 +-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/http_server.py b/http_server.py index f5a7878..cf7ec4d 100644 --- a/http_server.py +++ b/http_server.py @@ -95,7 +95,7 @@ class GazeboSimHttpServer(HttpRPCServer): # 启动roscore self.roscore_proc = subprocess.Popen( ['roscore'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - time.sleep(2) + time.sleep(5) rospy.init_node('gazebo_world_manager', anonymous=True) # 添加接口 @@ -259,6 +259,22 @@ class GazeboSimHttpServer(HttpRPCServer): print('Server remove model done.') return jsonify(ret) + def shutdown(self): + """ + 关闭所有资源。 + """ + # 1. 关闭场景(如果正在运行) + if self.scene_mgr.running_scene: + self.shut_scene() + # 2. 关闭 HeartbeatServer + self.heartbeat_server.stop() + # 3. 关闭 roscore 进程 + if self.roscore_proc: + self.roscore_proc.terminate() + self.roscore_proc.wait() + # 4. 关闭 Flask HTTP 服务器 + super().stop() + print("GazeboSimHttpServer stopped.") if __name__ == '__main__': server = GazeboSimHttpServer() diff --git a/main.py b/main.py index c9304d4..5b98c91 100755 --- a/main.py +++ b/main.py @@ -6,8 +6,7 @@ from http_server import GazeboSimHttpServer server = GazeboSimHttpServer() def signal_handler(sig, frame): - print('Exiting...') - server.stop() + server.shutdown() sys.exit(0) signal.signal(signal.SIGINT, signal_handler)