在 rospy.is_shutdown 时停止 serve_forever

Stop serve_forever when rospy.is_shutdown

我有以下 Python 程序来启动 HTTP 服务器和 ROS 节点。

httpd = ThreadingHttpServer()

rospy.init_node('server')
rospy.on_shutdown(httpd.shutdown)

try:
    httpd.serve_forever()
except KeyboardInterrupt:
    pass

httpd.server_close()

我希望程序终止

尽管我尝试了 rospy.on_shutdown() 和自己的 while 循环调用 httpd.handle_request().

,但我还是难以识别 ROS 关闭

在当前版本中,节点(以rosrun开头)在关闭时不会停止roscore

如何合理组合这两个模块?

我相信您可以通过在(或调用它的您自己的函数)上将套接字关闭函数注册为 rospy 关闭处理程序来停止。

   def shutdown_hook():
       print "Trying to shut down server"
       httpd.shutdown()

   rospy.on_shutdown(shutdown_hook)

如果shutdown()不行,试试httpd.socket.close()