Остановить serve_forever, когда 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 (это наименее важно).
Каким-то образом я борюсь с распознаванием выключения ROS, хотя я пытался rospy.on_shutdown()
и, альтернативно, собственный while
вызов цикла httpd.handle_request()
,
С текущей версией, узел (начался с rosrun
) не останавливается при выключении roscore
,
Как я могу разумно объединить эти два модуля?
1 ответ
Решение
Я полагаю, что вы можете остановиться, зарегистрировав функцию закрытия сокета на (или вашей собственной вызывающей функции) в качестве обработчика выключения.
def shutdown_hook():
print "Trying to shut down server"
httpd.shutdown()
rospy.on_shutdown(shutdown_hook)
Если shutdown()
не работает, попробуйте httpd.socket.close()