Skip to main content

tornado.platform.twisted — Twisted和Tornado之间的桥梁

Twisted reactor和Tornado IOLoop之间的桥梁。

此模块允许您运行在Tornado应用程序中为Twisted编写的应用程序和库。它可以在两种模式下使用,这取决于要使用的库的基础事件循环。

此模块已经过Twisted 11.0.0及更高版本的测试。

Twisted在Tornado

class tornado.platform.twisted.TornadoReactor(io_loop=None)[源代码]

Twisted reactor建在Tornado IOLoop。

TornadoReactor 在Tornado IOLoop上面实现Twisted reactor接口。要使用它,只需在应用程序的开头调用 install:

import tornado.platform.twisted
tornado.platform.twisted.install()
from twisted.internet import reactor

当应用程序准备开始时,调用 IOLoop.current().start() 而不是 reactor.run()

也可以通过调用 tornado.platform.twisted.TornadoReactor(io_loop) 创建非全局反应器。然而,如果 IOLoop 和反应器是短寿命的(例如在单元测试中使用的那些),则可能需要额外的净化。具体来说,建议打电话:

reactor.fireSystemEvent('shutdown')
reactor.disconnectAll()

在关闭 IOLoop 之前。

在 4.1 版更改: io_loop 参数已弃用。

tornado.platform.twisted.install(io_loop=None)[源代码]

将此软件包安装为默认的Twisted反应器。

install() 必须在启动过程的早期调用,在大多数其他twisted相关导入之前。相反,因为它初始化 IOLoop,所以它不能在 fork_processes 或多进程 start 之前被调用。这些冲突的要求使得难以在多进程模式中使用 TornadoReactor,并且推荐使用诸如 supervisord 的外部进程管理器。

在 4.1 版更改: io_loop 参数已弃用。

Tornado在Twisted

class tornado.platform.twisted.TwistedIOLoop[源代码]

IOLoop实现在Twisted上运行。

TwistedIOLoop 在Twisted反应器顶部实现Tornado IOLoop接口。推荐用法:

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()

默认情况下使用全局Twisted反应器。要在同一过程中创建多个 TwistedIOLoops,在构建每个 TwistedIOLoops 时必须传递一个唯一的反应器。

tornado.process.Subprocess.set_exit_callback 不兼容,因为Tornado和Twisted使用的 SIGCHLD 处理程序彼此冲突。

有关安装替代IOLoops的一般说明,请参阅 tornado.ioloop.IOLoop.install()

Twisted DNS解析器

class tornado.platform.twisted.TwistedResolver[源代码]

基于Twisted的异步解析器。

这是一个非阻塞和非线程解析器。仅当螺纹不能使用时才推荐使用,因为与标准的基于 getaddrinfoResolverThreadedResolver 相比,它具有局限性。具体来说,它最多返回一个结果,并且忽略除 hostfamily 之外的参数。当 family 不是 socket.AF_UNSPEC 时,它可能无法解决。

需要Twisted 12.1或更高版本。

在 4.1 版更改: io_loop 参数已弃用。