When the app is ready to start, call IOLoop.instance().start()
instead of reactor.run().

It is also possible to create a non-global reactor by calling
tornado.platform.twisted.TornadoReactor(io_loop). However, if
the IOLoop and reactor are to be short-lived (such as those used in
unit tests), additional cleanup may be required. Specifically, it is
recommended to call:

This is a non-blocking and non-threaded resolver. It is
recommended only when threads cannot be used, since it has
limitations compared to the standard getaddrinfo-based
Resolver and
ThreadedResolver. Specifically, it returns at
most one result, and arguments other than host and family
are ignored. It may fail to resolve when family is not
socket.AF_UNSPEC.