在Tornado.ioloop.IOloop.start中只有一行代码:
raise NotImplementedError()
我想知道以下代码之后会发生什么
app.listen(8888)
tornado.ioloop.IOLoop.instance().start()
感谢。
答案 0 :(得分:2)
实际上并未使用class IOLoop(Configurable)
。它只是一个基类。 Tornado会选择一个合适的子类作为默认IOLoop
。这样做的类方法是:
@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
来配置自己。如上所述,我们的IOLoop
是Configurable
的子类,并使用自己的configurable_default
来选择正确的IOLoop子类,该子类具有start
函数的工作实现以及其他所有内容。
在Linux上,PollIOLoop.start
方法实际上已执行。它的实现在这里:
https://github.com/tornadoweb/tornado/blob/master/tornado/ioloop.py#L705