`
standalone
  • 浏览: 611049 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Twisted中的DeferredList

阅读更多
在这个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系列教程中文简介 Twisted是一个基于Python的异步网络编程库,提供了一个灵活的架构来处理异步I/O操作。该教程将从基础开始,逐步深入Twisted的世界,帮助读者了解异步编程的思想和Twisted的使用方法。 ...

    Twisted系列教程 的中文翻译

    Twisted是Python语言中一个非常重要的网络编程框架,其核心理念在于提供一个事件驱动模型以实现异步编程。本系列教程是对Twisted框架的详细介绍,从基础理论到实际应用,逐步引导读者入门并深入理解Twisted的各种...

    Python Twisted网络编程框架(中文)

    Twisted 是一个非常强大的异步编程框架,主要用于Python中的网络编程。该框架能够帮助开发者轻松地构建高性能的网络应用,包括但不限于客户端和服务端应用。Twisted的核心设计原则之一是采用事件驱动的方式,这使得...

    twisted-intro-cn, 在中文中,异步编程和 Twisted的Dave介绍.zip

    twisted-intro-cn, 在中文中,异步编程和 Twisted的Dave介绍 异步编程和 Twisted 中的介绍本项目是"twisted与异步编程入门"系列文章的简体中文翻译。原文由Dave撰写,参见 krondo.com 。如果你是Twisted新手,...

    twisted适合python3.8版本

    Twisted是Python编程语言中的一个开源网络框架,专注于异步编程和事件驱动的网络应用开发。这个框架在Python社区中广泛使用,特别是对于构建高性能、高并发的服务器端应用程序。标题提到"twisted适合python3.8版本...

    中文Twisted入门教程

    - **非阻塞IO**:Twisted中的IO操作是非阻塞的,意味着在等待I/O操作完成时,程序不会被挂起,而是继续执行其他任务。 - **多路复用技术**:Reactor使用多路复用技术(如select/poll/epoll等)来同时监控多个文件...

    Twisted与异步编程入门

    【Twisted与异步编程入门】是一篇关于Python中Twisted框架和异步编程的教程。Twisted是一个强大的网络应用框架,特别适用于处理复杂的异步编程需求。文章首先强调了理解异步编程模型的重要性,指出只有深入理解模型...

    Twisted系列教程.pdf

    - **用Twisted的方式实现前面的内容**:通过重新实现第二部分中的诗歌服务器示例,展示了Twisted框架下异步编程的具体实现方法。 - **你好,Twisted**:这部分内容帮助读者了解Twisted的基本结构,包括如何创建一个...

    twisted whl安装包 v 17.9.0包含python2.7-3.7

    标题中的“twisted whl安装包 v 17.9.0包含python2.7-3.7”指的是Twisted库的一个特定版本——17.9.0,它以wheel(whl)格式提供,适用于Python 2.7到3.7的不同版本。在Python的生态系统中,whl是一种预编译的二进制...

    【批量下载】Twisted-历史各版本.zip

    在压缩包内的文件名称列表中,尽管给出的字符看似随机,但在实际场景中,这些文件名通常会包含版本信息,如"Twisted-18.4.0-cp36-cp36m-win_amd64.whl"这样的格式,表示的是适用于Python 3.6的Twisted 18.4.0版本,...

    Python安装scrapy框架的twisted文件(twisted.rar,Twisted-17.9.0.dist-info.rar)

    在这个场景中,`twisted.rar` 和 `Twisted-17.9.0.dist-info.rar` 是针对Python的Twisted库的压缩包文件,它是Scrapy框架的重要组成部分。 Twisted是一个异步网络编程库,它为Python提供了一个事件驱动的网络编程...

    twisted例子

    这个"twisted例子"可能是一个从Twisted系列教程中提取的实际应用示例,旨在帮助学习者更好地理解和掌握Twisted的核心概念和用法。 在Twisted框架中,主要关注的是事件驱动的非阻塞I/O,它允许程序在等待网络操作...

    twisted 异步教程 中文版

    在Twisted框架中,Reactor模式是实现异步编程的核心组件,它是对观察者模式的实现,能够响应并处理不同类型的事件。Twisted框架使用事件循环来监控事件源,当事件发生时触发回调函数。 本教程深入介绍了Twisted的...

    Twisted事件驱动网络框架

    在Twisted中,这一核心组件称为`reactor`。当一个网络事件(如数据接收或连接请求)发生时,`reactor`会调度相应的回调函数来处理这些事件,而无需阻塞主线程等待事件完成。这种设计使得Twisted能够同时处理多个连接...

    Python Twisted-22.10.0-py3-none-any

    Twisted诞生于2000年初,在当时的网络游戏开发者看来,无论他们使用哪种语言,手中都鲜有可兼顾扩展性及跨平台的网络库。Twisted的作者试图在当时现有的环境下开发游戏,这一步走的非常艰难,他们迫切地需要一个可...

    Twisted适配python3.5

    标题中的"Twisted适配python3.5"指的是Python编程中的一个关键问题,即Twisted框架与Python 3.5版本的兼容性。Twisted是一个用Python编写的事件驱动网络编程库,广泛用于异步网络服务,如网络客户端、服务器、协议...

    twisted, vitualc++ 包

    标题中的“twisted, virtualc++ 包”指的是与Python编程语言相关的两个关键组件:Twisted框架和Visual C++编译器。Twisted是Python的一个网络应用框架,它提供了大量用于编写异步网络代码的库,包括服务器和客户端。...

Global site tag (gtag.js) - Google Analytics