python高级应用-twisted框架
来源:互联网 发布:sublimetext2 python 编辑:程序博客网 时间:2024/06/04 23:29
关于twisted的介绍,我觉得这篇blog写得挺好的
总得来说,twisted是为python提供一个异步操作,跟java中的NIO很类似,twisted框架的低层实现技术是使用yield协程来创建一个Reactor loop,在这个loop中,当一个事件发生后就把事件分发给相应的处理程序,并且这个事件监听是异步的,在单线程的环境下,既避免了线程的阻塞,又可以省去CPU对线程的调度消耗,缺点也很明显,就是不能利用多核CPU。
#!encoding=utf8
from twisted.internet import reactor
reactor.run()
执行这段代码,程序会卡住,这里的卡住并不是真正的卡住,而是异步的select在监听事件的发生,然后我们却什么事件也没有写,因此永远都不会有事件到来,所以会一直等待下去,但是这个等待其实并不会浪费多少CPU,因为这里的select是异步非阻塞的。通过查看系统监视器我们可以发现python其实并没有占用CPU
想要reactor能够监听到事件,要先给loop中添加一个事件
#!encoding=utf8
from twisted.internet import reactor
# reactor.run()
def test():
print "do something"
reactor.callWhenRunning(test)
reactor.run()
此段代码运行的结果:
do something
当打印出do something后程序又卡住了,这是因为当监听处理守test后reactor又进入到监听等待状态了
根据上面的代码,很明显能够看出reactor loop是通过回调来实现事件监听处理的,reactor调用callWhenRunning时传入函数test的引用,当处理事件时就调用test函数。
其实reactor是一个Singlton的,我们并不能直接创建reactor的对象,如果想停止loop,可以在任意时刻任意地点调用reactor.stop函数,reactor还有一个延迟执行函数reactor.callLater(n,func)第一个参数是延迟的时间,第二个参数是要执行的操作的函数回调。并且这个延迟执行也是基本异步的。
由于网络是需要很强的健壮性的,当一个随机bug发生时,应该不能影响到整个网络连接过程,因为reactor在一个事件中如果产生了异常,这个异常并不会传递出来而影响到其他的事件。
- python高级应用-twisted框架
- python 框架 twisted
- python Twisted框架
- Python Twisted框架
- Twisted 网络开发python框架
- Python的Twisted框架入门
- 一个简单的Twisted框架应用
- Python Twisted 框架中 socket通信
- Python Twisted框架中socket通讯
- Twisted python 开发游戏的服务器框架
- python twisted 框架 client 和server 模型
- Python Twisted 框架中 socket通信
- Python安装Twisted框架并使用
- Python网络框架Twisted的使用
- python实现网络编程 之Twisted框架
- python相关应用——twisted
- python twisted
- Python Twisted
- 网络判断
- OpenStack dashboard + Apache2.4.27 + HTTPS
- 基于react技术栈的单页应用(SPA)搭建_快速入门实践
- 岛国电影生物科普就是强—生物大跃进
- Codeforces Round #429 (Div. 1):B. Leha and another game about graph(DFS)
- python高级应用-twisted框架
- Hbase入门之三HBase Client API使用入门
- Unity3D
- Java 创建类报错
- Linux driver之input framework
- python(5)future模块
- BZOJ1046 洛谷 P2215 [HAOI2007]上升序列
- 算法竞赛入门经典java版程序CH3 uva1587
- 百度文库推广怎么做-百度文库推广技巧