Я не уверен, что вы имеете в виду под "правильно реализовать" - вам просто нужно отслеживать объект сервера и вызывать shutdown
для него, когда вы хотите. В forward.py
сервер не отслеживается, потому что последняя строка forward_tunnel
равна
ForwardServer(('', local_port), SubHander).serve_forever()
так что серверный объект уже не легко доступен. Но вы можете просто изменить это на, например ::
global theserver
theserver = ForwardServer(('', local_port), SubHander)
theserver.serve_forever()
и запустите функцию forward_tunnel
в отдельном потоке, чтобы функция main
вернула управление (пока serve_forever
работает в указанном отдельном потоке) и может вызывать theserver.shutdown()
всякий раз, когда это уместно и необходимо.