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()
    
    
  • 相关阅读:
    深入理解线程通信
    你应该知道的 volatile 关键字
    CSS-盒模型与文本溢出笔记
    Html-表单笔记
    浏览器中缓存Cache
    python-对requests请求简单的封装
    【译】MongoDb vs Mysql—以NodeJs为例
    太嚣张了!他竟用Python绕过了“验证码”
    【转】Python之道
    selenium-测试框架搭建(十三)
  • 原文地址:https://www.cnblogs.com/c-x-a/p/12731516.html
Copyright © 2011-2022 走看看