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
来配置自己。如上所述,我们的 IOLoop
是 Configurable
的子 class 并使用它自己的 configurable_default
来选择合适的 IOLoop 子 class,它有一个有效的实现start
功能和其他一切。
在Linux上,真正执行了PollIOLoop.start
方法。它的实现在这里:
https://github.com/tornadoweb/tornado/blob/master/tornado/ioloop.py#L705
在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
来配置自己。如上所述,我们的 IOLoop
是 Configurable
的子 class 并使用它自己的 configurable_default
来选择合适的 IOLoop 子 class,它有一个有效的实现start
功能和其他一切。
在Linux上,真正执行了PollIOLoop.start
方法。它的实现在这里:
https://github.com/tornadoweb/tornado/blob/master/tornado/ioloop.py#L705