本文所剖析的tornado源码版本为4.4.2

ioloop是tornado的关键,是他的最底层。

ioloop就是对I/O多路复用的封装,它实现了一个单例,将这个单例保存在IOLoop._instance中

ioloop实现了Reactor模型,将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程/进程阻塞在多路复用器上;一旦有I/O事件到来或是准备就绪(文件描述符或socket可读、写),多路复用器返回并将事先注册的相应I/O事件分发到对应的处理器中。

另外,ioloop还被用来集中运行回调函数以及集中处理定时任务

一 准备知识:

  1 首先我们要了解Reactor模型

  2 其次,我们要了解I/O多路复用,由于本文假设系统为Linux,所以要了解epoll以及Python中的select模块

  3 IOLoop类是Configurable类的子类,而Configurable类是一个工厂类,讲解在这

二  创建IOLoop实例

来看IOLoop,它的父类是Configurable类,也就是说:IOLoop是一个直属配置子类

class IOLoop(Configurable):
    ......

这里就要结合Configurable类进行讲解:

def __new__(cls, *args, **kwargs)
        '''
        解析出impl对象    
            1 cls是直属配置子类时,impl就是该直属配置子类的'执行类对象'
            2 cls是从属配置子类时,impl就是该从属配置子类自身
        然后实例化一个impl实例对象
        运行其initialize方法,并传入合并后的参数
        返回该impl实例对象
        '''
        base = cls.configurable_base()   
        init_kwargs = {}
        if cls is base:
            impl = cls.configured_class()
            if base.__impl_kwargs:
                init_kwargs.update(base.__impl_kwargs)
        else:
            impl = cls
        init_kwargs.update(kwargs)
        instance = super(Configurable, cls).__new__(impl)
        instance.initialize(*args, **init_kwargs)
        return instance
Configurable中的__new__方法

相关文章:

  • 2021-06-26
  • 2021-11-08
  • 2021-10-16
  • 2022-12-23
  • 2021-06-03
  • 2022-03-06
  • 2022-01-29
猜你喜欢
  • 2021-07-02
  • 2022-12-23
  • 2021-05-22
  • 2021-10-21
  • 2021-07-27
相关资源
相似解决方案