Я использую торнадо и наблюдаю за различными источниками данных и т. Д. Из отдельного потока.В этом случае важно закрыть веб-сервер, если пользователь закрывает браузер.Я просто полагаюсь на запросы сердцебиения из браузера, а затем хочу остановить торнадо ioloop.Это оказывается очень трудным:
# Start the main processing loop
mLoop = threading.Thread(target = mainLoop, args=())
mLoop.start()
# Set up webserver
parser = argparse.ArgumentParser(description="Starts a webserver.")
parser.add_argument("--port", type=int, default=8000, help="The port")
args = parser.parse_args()
handlers = [(r"/", IndexHandler), (r"/websocket", WebSocket),
(r'/static/(.*)', tornado.web.StaticFileHandler,
{'path': os.path.normpath(os.path.dirname(__file__))})]
application = tornado.web.Application(handlers)
application.listen(args.port)
webbrowser.open("http://localhost:%d/" % args.port, new=2)
tornado.ioloop.IOLoop.instance().start()
Основной цикл должен, в определенных условиях, остановить торнадо, но он не может получить доступ к ioloop для вызова IOLoop.stop () (или, возможно, лучшего IOLoop.instance)..stop ()) потому что это не тот поток, который его запустил.
Какой лучший способ сделать это?