Tornado.ioloop.IOloop.start 函数如何工作

how does Tornado.ioloop.IOloop.start function work

在Tornado.ioloop.IOloop.start中只有一行代码:

raise NotImplementedError()

我想知道下面的代码之后会发生什么

app.listen(8888)
tornado.ioloop.IOLoop.instance().start() 

谢谢。

class IOLoop(Configurable)实际上没有用到。这只是一个基础class。 Tornado 将 select 其适当的子 class 作为默认值 IOLoop。 class方法可以做到这一点:

@classmethod
def configurable_default(cls):
    if hasattr(select, "epoll"):
        from tornado.platform.epoll import EPollIOLoop
        return EPollIOLoop
    if hasattr(select, "kqueue"):
        # Python 2.6+ on BSD or Mac
        from tornado.platform.kqueue import KQueueIOLoop
        return KQueueIOLoop
    from tornado.platform.select import SelectIOLoop
    return SelectIOLoop

实现细节有点微不足道。首先在tornado.util中有一个class Configurable(object)。简单来说,它会使用configurable_default来配置自己。如上所述,我们的 IOLoopConfigurable 的子 class 并使用它自己的 configurable_default 来选择合适的 IOLoop 子 class,它有一个有效的实现start 功能和其他一切。

在Linux上,真正执行了PollIOLoop.start方法。它的实现在这里:

https://github.com/tornadoweb/tornado/blob/master/tornado/ioloop.py#L705