zoukankan      html  css  js  c++  java
  • twsited中的同步代码使用

    # -*- coding: utf-8 -*-
    # @时间 : 2020/4/19 1:48 下午
    # @作者 : 陈祥安
    # @文件名 : inlinecallback_demo.py
    # @公众号: Python学习开发
    from twisted.internet.defer import inlineCallbacks, Deferred, returnValue, ensureDeferred
    from twisted.python.failure import Failure
    
    from twisted.internet import reactor, defer
    
    
    def load_remote_data(callback):
        print("in load_remote_data")
        import time
        time.sleep(1)
        callback(1)
    
    
    def load_remote_data2(callback):
        import time
        time.sleep(1)
        print("in load_remote_data2")
        callback(2)
    
    
    @defer.inlineCallbacks
    def get_remote_data():
        d1 = defer.Deferred()
        reactor.callInThread(load_remote_data, d1.callback)
        r1 = yield d1
        print("r1", r1)
    
        d2 = defer.Deferred()
        reactor.callInThread(load_remote_data2, d2.callback)
        r2 = yield d2
        print("r2", r2)
    
        return r1 + r2
    
    
    def get_result(v):
        print("result=", v)
    
    
    if __name__ == '__main__':
        d =get_remote_data()
        d.addCallback(get_result)
    
        reactor.callLater(3, reactor.stop)
        reactor.run()
    
    

    python3.5以后上面的代码可以改为async/await的形式

    # -*- coding: utf-8 -*-
    # @时间 : 2020/4/19 1:48 下午
    # @作者 : 陈祥安
    # @文件名 : inlinecallback_demo.py
    # @公众号: Python学习开发
    from twisted.internet.defer import inlineCallbacks, Deferred, returnValue, ensureDeferred
    from twisted.python.failure import Failure
    
    from twisted.internet import reactor, defer
    
    
    def load_remote_data(callback):
        print("in load_remote_data")
        import time
        time.sleep(1)
        callback(1)
    
    
    def load_remote_data2(callback):
        import time
        time.sleep(1)
        print("in load_remote_data2")
        callback(2)
    
    
    # @defer.inlineCallbacks
    async def get_remote_data():
        d1 = defer.Deferred()
        reactor.callInThread(load_remote_data, d1.callback)
        r1 = await d1
        print("r1", r1)
    
        d2 = defer.Deferred()
        reactor.callInThread(load_remote_data2, d2.callback)
        r2 = await d2
        print("r2", r2)
    
        return r1 + r2
    
    
    def get_result(v):
        print("result=", v)
    
    
    if __name__ == '__main__':
        #将协程包装成defer对象
        d = ensureDeferred(get_remote_data())
        d.addCallback(get_result)
    
        reactor.callLater(3, reactor.stop)
        reactor.run()
    
    
  • 相关阅读:
    好消息,不用替换文件,凯立德能用了
    开心网外挂开发之 XML序列化于反序列化
    开心网外挂开发之 Singleton 单件模式应用
    开心网外挂开发之 开篇
    新买的雷柏1800无线套装
    新年好!!!!!!!!!!!!!!!!!!!!!!!
    恩,我还在写代码
    VS2019安装MSDN离线文档
    xaf使用非持久化类(nonpersistent)来展示lookuplist和展示树结构
    My Record Series: (1.2) Windows Phone 7 Launchers and Choosers
  • 原文地址:https://www.cnblogs.com/c-x-a/p/12731516.html
Copyright © 2011-2022 走看看