Como executar funções fora do loop websocket em python (tornado)

Eu estou tentando criar um pequeno exemplo de um fluxo público do Twitter através de websockets. Este é o meu websocket.py e está funcionando.

O que eu estou querendo saber é: como eu posso interagir com o websocket de 'fora' da classe WSHandler (ou seja, não apenas responder ao receber uma mensagem do websocket.js)? Digamos que eu queira executar alguma outra função dentro desse mesmo script que possa postar "olá!" a cada cinco segundos e enviá-lo para o websocket (navegador) sem qualquer interação do lado do cliente. Como eu pude fazer isso?

Portanto, é uma questão fundamental para iniciantes, suponho, sobre como lidar com as aulas como as que estão abaixo. Quaisquer ponteiros em qualquer direção seriam muito apreciados!

import os.path
import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web

# websocket
class FaviconHandler(tornado.web.RequestHandler):
    def get(self):
        self.redirect('/static/favicon.ico')

class WebHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("websockets.html")

class WSHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        print 'new connection'
        self.write_message("Hi, client: connection is made ...")

    def on_message(self, message):
        print 'message received: \"%s\"' % message
        self.write_message("Echo: \"" + message + "\"")
        if (message == "green"):
            self.write_message("green!")

    def on_close(self):
        print 'connection closed'



handlers = [
    (r"/favicon.ico", FaviconHandler),
    (r'/static/(.*)', tornado.web.StaticFileHandler, {'path': 'static'}),
    (r'/', WebHandler),
    (r'/ws', WSHandler),
]

settings = dict(
    template_path=os.path.join(os.path.dirname(__file__), "static"),
)

application = tornado.web.Application(handlers, **settings)

if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

questionAnswers(3)

yourAnswerToTheQuestion