tornado.platform.twisted — Bridges between Twisted and Tornado¶
Bridges between the Twisted reactor and Tornado IOLoop.
This module lets you run applications and libraries written for Twisted in a Tornado application. It can be used in two modes, depending on which library’s underlying event loop you want to use.
This module has been tested with Twisted versions 11.0.0 and newer.
Twisted on Tornado¶
-
class
tornado.platform.twisted.TornadoReactor(io_loop=None)[源代码]¶ Twisted reactor built on the Tornado IOLoop.
TornadoReactorimplements the Twisted reactor interface on top of the Tornado IOLoop. To use it, simply callinstallat the beginning of the application:import tornado.platform.twisted tornado.platform.twisted.install() from twisted.internet import reactor
When the app is ready to start, call
IOLoop.current().start()instead ofreactor.run().It is also possible to create a non-global reactor by calling
tornado.platform.twisted.TornadoReactor(io_loop). However, if theIOLoopand reactor are to be short-lived (such as those used in unit tests), additional cleanup may be required. Specifically, it is recommended to call:reactor.fireSystemEvent('shutdown') reactor.disconnectAll()
before closing the
IOLoop.在 4.1 版更改: The
io_loopargument is deprecated.
-
tornado.platform.twisted.install(io_loop=None)[源代码]¶ Install this package as the default Twisted reactor.
install()must be called very early in the startup process, before most other twisted-related imports. Conversely, because it initializes theIOLoop, it cannot be called beforefork_processesor multi-processstart. These conflicting requirements make it difficult to useTornadoReactorin multi-process mode, and an external process manager such assupervisordis recommended instead.在 4.1 版更改: The
io_loopargument is deprecated.
Tornado on Twisted¶
-
class
tornado.platform.twisted.TwistedIOLoop[源代码]¶ IOLoop implementation that runs on Twisted.
TwistedIOLoopimplements the Tornado IOLoop interface on top of the Twisted reactor. Recommended usage:from tornado.platform.twisted import TwistedIOLoop from twisted.internet import reactor TwistedIOLoop().install() # Set up your tornado application as usual using `IOLoop.instance` reactor.run()
Uses the global Twisted reactor by default. To create multiple
TwistedIOLoopsin the same process, you must pass a unique reactor when constructing each one.Not compatible with
tornado.process.Subprocess.set_exit_callbackbecause theSIGCHLDhandlers used by Tornado and Twisted conflict with each other.
Twisted DNS resolver¶
-
class
tornado.platform.twisted.TwistedResolver[源代码]¶ Twisted-based asynchronous resolver.
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-basedResolverandThreadedResolver. Specifically, it returns at most one result, and arguments other thanhostandfamilyare ignored. It may fail to resolve whenfamilyis notsocket.AF_UNSPEC.Requires Twisted 12.1 or newer.
在 4.1 版更改: The
io_loopargument is deprecated.