在这个blog上学习twisted。
http://blog.163.com/gzjck_gshock/blog/static/77206203201291461538770/
里面的一个关于DeferredList的例子一开始对语法不太理解,copy并run了一遍就理解了,把代码贴在这里留作以后借鉴。
connecttest.py:
from twisted.internet import reactor, defer, protocol
class CallbackAndDisconnectProtocol(protocol.Protocol):
def connectionMade(self):
self.factory.deferred.callback("Connected!")
self.transport.loseConnection( )
class ConnectionTestFactory(protocol.ClientFactory):
protocol = CallbackAndDisconnectProtocol
def __init__(self):
self.deferred = defer.Deferred( )
def clientConnectionFailed(self, connector, reason):
self.deferred.errback(reason)
def testConnect(host, port):
testFactory = ConnectionTestFactory( )
reactor.connectTCP(host, port, testFactory)
return testFactory.deferred
def handleSuccess(result, port):
print "Connected to port %i" % port
reactor.stop( )
def handleFailure(failure, port):
print "Error connecting to port %i: %s" % (
port, failure.getErrorMessage( ))
reactor.stop( )
if __name__ == "__main__":
import sys
if not len(sys.argv) == 3:
print "Usage: connectiontest.py host port"
sys.exit(1)
host = sys.argv[1]
port = int(sys.argv[2])
connecting = testConnect(host, port)
connecting.addCallback(handleSuccess, port)
connecting.addErrback(handleFailure, port)
reactor.run( )
portscan.py
from twisted.internet import reactor, defer
from connecttest import testConnect
def handleAllResults(results, ports):
for port, resultInfo in zip(ports, results):
print resultInfo
success, result = resultInfo
if success:
print "Connected to port %i" % port
reactor.stop( )
import sys
host = sys.argv[1]
ports = range(8000, 8010)
testers = [testConnect(host, port) for port in ports]
defer.DeferredList(testers, consumeErrors=True).addCallback(
handleAllResults, ports)
reactor.run( )
执行脚本连接localhost:
$python portscan.py 127.0.0.1
(False, <twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionRefusedError'>>)
(False, <twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionRefusedError'>>)
(False, <twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionRefusedError'>>)
(False, <twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionRefusedError'>>)
(False, <twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionRefusedError'>>)
(False, <twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionRefusedError'>>)
(False, <twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionRefusedError'>>)
(True, 'Connected!')
Connected to port 8007
(False, <twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionRefusedError'>>)
(False, <twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionRefusedError'>>)
我将DeferredList中的每个Deferred打印出来就看懂handleAllResults()中的resultInfo是什么了。
分享到:
相关推荐
Twisted系列教程中文简介 Twisted是一个基于Python的异步网络编程库,提供了一个灵活的架构来处理异步I/O操作。该教程将从基础开始,逐步深入Twisted的世界,帮助读者了解异步编程的思想和Twisted的使用方法。 ...
Twisted是Python语言中一个非常重要的网络编程框架,其核心理念在于提供一个事件驱动模型以实现异步编程。本系列教程是对Twisted框架的详细介绍,从基础理论到实际应用,逐步引导读者入门并深入理解Twisted的各种...
Twisted 是一个非常强大的异步编程框架,主要用于Python中的网络编程。该框架能够帮助开发者轻松地构建高性能的网络应用,包括但不限于客户端和服务端应用。Twisted的核心设计原则之一是采用事件驱动的方式,这使得...
twisted-intro-cn, 在中文中,异步编程和 Twisted的Dave介绍 异步编程和 Twisted 中的介绍本项目是"twisted与异步编程入门"系列文章的简体中文翻译。原文由Dave撰写,参见 krondo.com 。如果你是Twisted新手,...
Twisted是Python编程语言中的一个开源网络框架,专注于异步编程和事件驱动的网络应用开发。这个框架在Python社区中广泛使用,特别是对于构建高性能、高并发的服务器端应用程序。标题提到"twisted适合python3.8版本...
- **非阻塞IO**:Twisted中的IO操作是非阻塞的,意味着在等待I/O操作完成时,程序不会被挂起,而是继续执行其他任务。 - **多路复用技术**:Reactor使用多路复用技术(如select/poll/epoll等)来同时监控多个文件...
【Twisted与异步编程入门】是一篇关于Python中Twisted框架和异步编程的教程。Twisted是一个强大的网络应用框架,特别适用于处理复杂的异步编程需求。文章首先强调了理解异步编程模型的重要性,指出只有深入理解模型...
- **用Twisted的方式实现前面的内容**:通过重新实现第二部分中的诗歌服务器示例,展示了Twisted框架下异步编程的具体实现方法。 - **你好,Twisted**:这部分内容帮助读者了解Twisted的基本结构,包括如何创建一个...
标题中的“twisted whl安装包 v 17.9.0包含python2.7-3.7”指的是Twisted库的一个特定版本——17.9.0,它以wheel(whl)格式提供,适用于Python 2.7到3.7的不同版本。在Python的生态系统中,whl是一种预编译的二进制...
在压缩包内的文件名称列表中,尽管给出的字符看似随机,但在实际场景中,这些文件名通常会包含版本信息,如"Twisted-18.4.0-cp36-cp36m-win_amd64.whl"这样的格式,表示的是适用于Python 3.6的Twisted 18.4.0版本,...
在这个场景中,`twisted.rar` 和 `Twisted-17.9.0.dist-info.rar` 是针对Python的Twisted库的压缩包文件,它是Scrapy框架的重要组成部分。 Twisted是一个异步网络编程库,它为Python提供了一个事件驱动的网络编程...
这个"twisted例子"可能是一个从Twisted系列教程中提取的实际应用示例,旨在帮助学习者更好地理解和掌握Twisted的核心概念和用法。 在Twisted框架中,主要关注的是事件驱动的非阻塞I/O,它允许程序在等待网络操作...
在Twisted框架中,Reactor模式是实现异步编程的核心组件,它是对观察者模式的实现,能够响应并处理不同类型的事件。Twisted框架使用事件循环来监控事件源,当事件发生时触发回调函数。 本教程深入介绍了Twisted的...
在Twisted中,这一核心组件称为`reactor`。当一个网络事件(如数据接收或连接请求)发生时,`reactor`会调度相应的回调函数来处理这些事件,而无需阻塞主线程等待事件完成。这种设计使得Twisted能够同时处理多个连接...
Twisted诞生于2000年初,在当时的网络游戏开发者看来,无论他们使用哪种语言,手中都鲜有可兼顾扩展性及跨平台的网络库。Twisted的作者试图在当时现有的环境下开发游戏,这一步走的非常艰难,他们迫切地需要一个可...
标题中的"Twisted适配python3.5"指的是Python编程中的一个关键问题,即Twisted框架与Python 3.5版本的兼容性。Twisted是一个用Python编写的事件驱动网络编程库,广泛用于异步网络服务,如网络客户端、服务器、协议...
标题中的“twisted, virtualc++ 包”指的是与Python编程语言相关的两个关键组件:Twisted框架和Visual C++编译器。Twisted是Python的一个网络应用框架,它提供了大量用于编写异步网络代码的库,包括服务器和客户端。...