在 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()
我希望程序终止
- 当我调用
httpd.shutdown()
时(例如在收到 /kill
命令后),
- 当 ROS 关闭时(即如果
rospy.is_shutdown()
)和
- 当我按下 Ctrl+C 时(这是最不重要的)。
尽管我尝试了 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()
我有以下 Python 程序来启动 HTTP 服务器和 ROS 节点。
httpd = ThreadingHttpServer()
rospy.init_node('server')
rospy.on_shutdown(httpd.shutdown)
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
我希望程序终止
- 当我调用
httpd.shutdown()
时(例如在收到/kill
命令后), - 当 ROS 关闭时(即如果
rospy.is_shutdown()
)和 - 当我按下 Ctrl+C 时(这是最不重要的)。
尽管我尝试了 rospy.on_shutdown()
和自己的 while
循环调用 httpd.handle_request()
.
在当前版本中,节点(以rosrun
开头)在关闭时不会停止roscore
。
如何合理组合这两个模块?
我相信您可以通过在(或调用它的您自己的函数)上将套接字关闭函数注册为 rospy 关闭处理程序来停止。
def shutdown_hook():
print "Trying to shut down server"
httpd.shutdown()
rospy.on_shutdown(shutdown_hook)
如果shutdown()
不行,试试httpd.socket.close()