Twisted 是用Python编写的开源的 framework,它基于事件-驱动模式,高效、简洁的实现了非阻塞方式的网络编程。在Twisted中有个event loop,被称为事件管理,当其运行时,它就开始侦听各种事件的发生,并启动事件的响应函数。Twisted默认对事件不做任何处理,如果你添加了某个事件的处理函数,那就遵循你的处理过程了,是不是很简单。
在Twisted中的event loop,就是reactor对象了,reactor对象处理许多重要的任务:如: scheduling, threading, 建立网络连接,侦听客户端的连接等等, 如果想要reactor处理上述事件,则只要运行reactor.run()即可。
例如:下面的一个例子
from twisted.internet import reactor #导入reactor模块
print "Runing the reactor..."
reactor.run() #运行reactor,进入Twisted的事件循环管理
print "reactor stopped."
上面的代码什么也不做,因为我们没有添加任何的事件处理函数,如果不调用reactor.stop(),则程序一直处于接受事件的过程中,或者键入Ctrl-C组合键来强制关闭程序。下面再写个例子,该例子调用reactor.callLater()函数,这个函数的作用是告诉reactor我要在将来某个时间里,执行哪些工作,类似于计划任务。该函数有两个参数,第一个参数为要等待的秒数,第二个是要运行的函数名称,如果该函数有参数,则可以填写传递的参数:如:reactor.callLater(10,func,True,x=2) ,func为函数名称,True和x=2为func函数的参数。
from twisted.internet import reactor
import time
def printTime():
print "Current tim is",time.strftime("%H:%M:%S")
def stopReactor():
print "stopping reactor"
reactor.stop()
reactor.callLater(1,printTime) #1秒后执行printTime函数
reactor.callLater(10,printTime) #10秒后再执行printTime函数
reactor.callLater(15,stopReactor) #15秒后执行stopReactor函数,在退出event loop。
print "Running the reactor..."
reactor.run()
print "Rector stopped."
所有的网络通讯,必须建立在两台计算机建立连接通道的情况下,进行数据传输,那么在Twisted中如何建立呢?其实Twisted都已经封装了网络通讯的底层协议,我们只要调用reactor.connectTCP()方法即可,该方法有3个参数,第一个是需要连接的主机,第二个是端口号,第三个是一个ClientFactory 对象,该ClientFactory对象负责建立网络连接后的工作,看下面的例子:
from twisted.internet import reactor,protocol
class QuickDisconnectProtocol(protocol.Protocol):
def connectionMade(self): #---重载了Protocol的connectionMade()方法,该事件在连接成功后出现
print 'Connected to %s.' % self.transport.getPeer().host
self.transport.loseConnection() #---
class BasicClientFactory(protocol.ClientFactory):
protocol=QuickDisconnectProtocol # --设置protocol属性为自定义的QuickDisconnectProtocol
def clientConnectionLost(self,connector,reason): #--重载了clientConnectionLost方法,该事件在已经建立的通道端口或关闭的情况下触发。
print 'Lost connection:%s' % reason.getErrorMessage()
reactor.stop()
def clientConnectionFailed(self,connector,reason): #--也是重载了clientConnectionFailed方法,该事件在无法建立通道的情况下触发。
print 'Connection failed:%s' % reason.getErrorMessage()
reactor.stop()
reactor.connectTCP('www.comeinfo.com',80,BasicClientFactory())
reactor.run()
上面定义了两个类,分别继承自ClientFactory 和 Protocol类,这两个类处理连接中所有可能发生的事件:成功建立连接、连接失败、连接断开、数据传送等等。<o:p></o:p>ClientFactory类负责管理连接通道的各种事件,一旦通道建立成功,则ClientFactory就会自动创建一个Protocol对象来处理每一个成功的连接,该Protocol对象就可以在该通道上进行数据传输等各种工作,如数据的接受、发送,是否关闭连接等。
twisted中定义了多个事件的原型,在程序中只要重载需要的方法,即可完成事件-驱动模式的编写,编写起来和delphi以及其他RAD 一样。
分享到:
相关推荐
描述中的 "Twisted-19.2.1-cp37-cp37m-win_amd64.whl 官方文件 官网下载太慢了" 指出压缩包内的主要文件是一个名为"Twisted-19.2.1-cp37-cp37m-win_amd64.whl"的Wheel文件,这是Python的一种二进制分发格式,方便...
Twisted python3.5 Twisted python3.5 Twisted python3.5 Twisted python3.5 Twisted python3.5 Twisted-17.9.0-cp35-cp35m-win_amd64.whl Twisted-17.9.0-cp35-cp35m-win_amd64.whl Twisted-17.9.0-cp35-cp35m-win_...
Twisted-19.2.1-cp27-cp27m-win_amd64.whl,用于不想下载VC++14运行库,pipi install Twisted-19.2.1-cp27-cp27m-win_amd64.whl 直接安装
anaconda python3.7 twisted安装包Twisted-19.7.0-cp37-cp37m-win_amd64.whl
python爬虫scrapy模块安装之前的必备模块Twisted-17.1.0-cp35-cp35m-win32.whl,此版本对应的是Twisted-17.1.0、python3.5、win32位 系统。
python3.6 爬虫 window 直接命令行安装 Twisted-17.5.0-cp36-cp36m-win32.whl python3.6 爬虫 window 直接命令行安装 Twisted-17.5.0-cp36-cp36m-win32.whl python3.6 爬虫 window 直接命令行安装 Twisted-17.5.0-...
Twisted-19.2.0-cp37-cp37m-win_amd64.whl,用于不想下载VC++14运行库,pipi install Twisted-19.2.0-cp37-cp37m-win_amd64.whl 直接安装
解决Python3.6中安装y一些包时出现错误:error: Microsoft Visual C++ 14.0 is required....按照提示需要安装C++14.0的一个库,但此库总的有很...在包的放置路径下,执行pip install Twisted-18.9.0-cp36-cp36m-win32.whl
python爬虫scrapy模块安装之前的必备模块Twisted-17.5.0-cp36-cp36m-win_amd64.whl,此版本对应的是Twisted-17.5.0、python3.6、win64位 系统。
Twisted- python3.7 Twisted-19.2.1-cp37-cp37m-win_amd64.whl
用于安装相关程序需使用Twisted的whl文件,适用于python3.6和3.7,32位和64位的系统都有,共4个文件打包一起,使用方法: 1、pip install wheel ...3、pip install Twisted-18.7.0-cp36-cp36m-win_amd64.whl
标题中的“Twisted-19.2.1-cp37-cp37m-win_amd64”和“Twisted-19.2.0-cp27-cp27m-win_amd64”指的是Python的一个著名开源库——Twisted的两个不同版本。Twisted是一个用于网络编程的事件驱动的网络引擎,它为Python...
Twisted-18.4.0-cp36-cp36m-win_amd64.whl 1.pip 安装scrapy报错: building 'twisted.test.raiser' extension error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": ...
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:twisted_iocpsupport-1.0.2rc0-cp38-cp38-win_amd64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Twisted-19.2.1-cp38-cp38m-win_amd64.whl,用于不想下载VC++14运行库,pipi install Twisted-19.2.1-cp38-cp38m-win_amd64.whl 直接安装
Twisted-17.9.0-cp36-cp36m-win32.whl Twisted-17.9.0-cp36-cp36m-win32.whl
Twisted-17.9.0-cp27-cp27m-win_amd64.whl
在Python 3.7环境下,我们可以通过安装"Twisted-18.7.0-cp37-cp37m-win_amd64.whl"这个特定版本的包来支持64位的Windows系统。 1. **Twisted框架的核心特性**: - **事件驱动编程**:Twisted基于异步事件模型,...
在这里,提供的 `Twisted-18.7.0-cp36-cp36m-win_amd64.whl` 文件是一个预编译的 wheel 包,专为 `Python 3.6` 和 `AMD64` 架构的 Windows 系统设计。使用它可以避免编译过程中的问题,直接通过 `pip` 安装: ```...