tornado: IOLoop

 

小白说在前面:“俺一没任何unix/linux基础(就会安装个程序啥的),二基本没有python的基础(话说年前给我一个简单的python程序俺都看不懂)。所以碰到ioloop这个涉及到线程/信号/EPOLL之流底层知识的时候彻底土鳖,所以边猜边看,无知者无罪 酷

 

看到代码里第一句话有点儿感动“An I/O event loop for non-blocking sockets.”,尼玛这难道就是windows里面的消息泵?带着疑惑看到IOLoop.start方法里面的while True: 的时候,我笑了。。。

 

那就从它开始看起吧。。。

 

正如前面猜测的IOLoop.start扮演了一个类似于windows窗口程序中消息泵的角色:从EPOLL来的IO消息会在这里集中收集,并且分发到相应的,之前在IOLoop中注册过的event handler(callback)上。从代码来看,这个事件处理队列支持以下几种:

  1. 通过add_callback添加的callback函数。这些函数只有一个触发条件,就是,每次while循环的时候触发一遍。实际使用起来不知道这个特性能干些啥,不过我觉得用来做profiling似乎能用上。
  2. 通过add_timeout添加的需要等待timeout的异步事件。
  3. 通过add_handler添加的从EPOLL而来的fd事件。

在每次while循环重新开始的时候,执行的次序也如同上面所列,当所有步骤执行完毕之后,会进入下一次循环。需要注意的是,再while循环开始以前,会检查一个标记位,决定是否ioloop.stop被执行过,如果已经stop,则停止循环,结束此进程;否则,继续执行。所以这里有一个问题是,当调用stop方法后,其实很有可能仍然有任务还在执行。

 

正因为IOLoop提供的timeout机制,所以tornado提供了一个类叫做PeriodicCallback的类,封装了对ioloop的使用。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值