`
wwty
  • 浏览: 543017 次
  • 性别: Icon_minigender_1
  • 来自: 北京-郑州
社区版块
存档分类
最新评论

针对twisted--Defered的单线程多任务的理解

 
阅读更多

从网上找了不少关于twisted的Defered的文章来看,大致了解了异步机制的概念,但是看别人的东西难免有那么一点疑问,虽然别人讲的也很清楚了,可有时候就是跟自己原有的想法有出入,于是问题出来了,怎么去验证到底这种出入谁的是正确的?比如defer当中的回调,我的疑问可以简单的归纳为:

回调函数的执行是在一个任务当中的体现,还是在不同任务间的体现呢?

下面有段代码是我改进后测试我的想法用的:

from twisted.internet import reactor,defer,protocol,posixbase
import time

class CallbackAndDisconnectProtocol(protocol.Protocol):
    def connectionMade(self):
        print "server start"
    
    def dataReceived(self, data):
        defer = self.factory.dataConsole()
        defer.addCallback(handleSuccess,5001)
        defer.addErrback(handleFailure,5001)

class ConnectionTestFactory(protocol.ServerFactory):
    protocol=CallbackAndDisconnectProtocol
    def dataConsole(self):
        time.sleep(6)
        print "**********************"
        return defer.succeed("sdfdsfsdf")

def testConnect():
    testFactory=ConnectionTestFactory()
    reactor.listenTCP(5001,testFactory)

def handleSuccess(result,port):
    print "Connect to port %i"%port
    

def handleFailure(failure,port):
    print "Error connecting to port %i: %s"%(port,failure.getErrorMessage())
    
    
if __name__=="__main__":
    connecting=testConnect()
    reactor.run()

 ConnectionTestFactory当中的dataConsole方法最终返回了defer对象,随后在protocal当中为这个defer定义了回调方法,那么这个回调方法是在dataConsole方法返回后执行呢?还是在dataConsole方法执行的过程中,回调机制就会执行呢?

为了验证这一点,我特定让dataConsole方法延迟了6秒执行,然后通过cmd下telnet这个服务端,我同时开了两个telnet,这样就可以非常明白的观察出来了。

结论:callback是在dataConsole方法返回defer后才会执行的。也就是回调函数的执行体现在多个任务之间,而不是在一个任务当中先于返回defer而去执行。

结论和网上看到的牛人写的东西一致,哈哈,也许是自己的想法有点弱智,但是我自己验证了一下,更能让自己心安理得。

分享到:
评论

相关推荐

    Twisted-20.3.0-cp37-cp37m-win_amd64.whl.zip

    标题中的"Twisted-20.3.0-cp37-cp37m-win_amd64.whl.zip"是指一个针对Python爬虫开发的Twisted库的特定版本,适用于64位Windows操作系统和Python 3.7环境。Twisted是一个强大的事件驱动的网络编程框架,特别适合构建...

    Twisted-20.3.0-cp39-cp39-win_amd64.whl

    标题中的"Twisted-20.3.0-cp39-cp39-win_amd64.whl"是一款Python库Twisted的特定版本,针对Python 3.9编译的Windows 64位平台的wheel文件。在Python中,wheel是一种预编译的二进制包格式,它使得安装过程更快捷,...

    Python工具资源:Twisted-19.2.1-cp37-cp37m-win_amd64;Twisted-19.2.0-cp37-cp37m-win_amd

    标题中的“Twisted-19.2.1-cp37-cp37m-win_amd64”和“Twisted-19.2.0-cp27-cp27m-win_amd64”指的是Python的一个著名开源库——Twisted的两个不同版本。Twisted是一个用于网络编程的事件驱动的网络引擎,它为Python...

    Twisted-19.2.1-cp37-cp37m-win_amd64.whl

    Twisted- python3.7 Twisted-19.2.1-cp37-cp37m-win_amd64.whl

    Twisted-19.2.1-cp37-cp37m-win_amd64(官方文件).zip

    描述中的 "Twisted-19.2.1-cp37-cp37m-win_amd64.whl 官方文件 官网下载太慢了" 指出压缩包内的主要文件是一个名为"Twisted-19.2.1-cp37-cp37m-win_amd64.whl"的Wheel文件,这是Python的一种二进制分发格式,方便...

    Twisted-17.9.0-cp35-cp35m-win_amd64.whl

    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-17.1.0-cp35-cp35m-win32.whl

    python爬虫scrapy模块安装之前的必备模块Twisted-17.1.0-cp35-cp35m-win32.whl,此版本对应的是Twisted-17.1.0、python3.5、win32位 系统。

    Twisted-20.3.0-cp38-cp38

    解压缩后含有3.8python 32位和64位两个版本。...pip.exe install .\Twisted-20.3.0-cp38-cp38-win32.whl(32位) pip.exe install .\Twisted-20.3.0-cp38-cp38-win_amd64.whl(64位) 安装成功后再次安装scrapy 即可!

    Twisted-19.2.1-cp27-cp27m-win_amd64.whl

    Twisted-19.2.1-cp27-cp27m-win_amd64.whl,用于不想下载VC++14运行库,pipi install Twisted-19.2.1-cp27-cp27m-win_amd64.whl 直接安装

    Twisted-19.10.0-cp38-cp38-win32.whl

    Twisted-19.10.0-cp38-cp38-win32.whl Twisted-19.10.0-cp38-cp38-win32.whl

    Twisted-17.5.0-cp36-cp36m-win_amd64.whl

    python爬虫scrapy模块安装之前的必备模块Twisted-17.5.0-cp36-cp36m-win_amd64.whl,此版本对应的是Twisted-17.5.0、python3.6、win64位 系统。

    Twisted-19.2.0-cp37-cp37m-win_amd64.whl

    Twisted-19.2.0-cp37-cp37m-win_amd64.whl,用于不想下载VC++14运行库,pipi install Twisted-19.2.0-cp37-cp37m-win_amd64.whl 直接安装

    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-cp36-cp36m-win32.whl python3.6 爬虫 window 直接命令行安装 Twisted-17.5.0-...

    Twisted-18.9.0-cp36-cp36m-win32.whl, Microsoft Visual C++ 14.0集成python用包

    解决Python3.6中安装y一些包时出现错误:error: Microsoft Visual C++ 14.0 is required....按照提示需要安装C++14.0的一个库,但此库总的有很...在包的放置路径下,执行pip install Twisted-18.9.0-cp36-cp36m-win32.whl

    Twisted-19.7.0-cp37-cp37m-win_amd64.whl

    anaconda python3.7 twisted安装包Twisted-19.7.0-cp37-cp37m-win_amd64.whl

    Twisted-21.7.0-py3-none-any

    Twisted-21.7.0-py3-none-any

    twisted-18.9.0-whl

    twisted-18.9.0版本所有whl文件。 文件目录 Twisted-18.9.0-cpxx-cpxxm-win32.whl Twisted-18.9.0-cpxx-cpxxm-win_amd64.whl xx: 27,34,35,36,37

    Twisted-18.7.0-python3.6-3.7 32位和64位

    用于安装相关程序需使用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-18.4.0-cp36-cp36m-win_amd64.whl

    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": ...

    Twisted-16.5.0-cp36-cp36m-win32.whl

    python爬虫scrapy模块安装之前的必备模块Twisted-16.5.0-cp36-cp36m-win32.whl,此版本对应的是Twisted-16.5.0、python3.6、win32位 系统。

Global site tag (gtag.js) - Google Analytics