zoukankan      html  css  js  c++  java
  • 异步调用与回调机制

    同步调用与异步调用指提交任务的方式就

    同步调用:提交完任务后就在原地等待任务执行完,拿到结果再执行下一步任务,导致程序串行执行

    from concurrent.futures import ThreadPoolExecutor
    import time,random
    def la(name):
        print("%s is laing" % name)
        time.sleep(random.randrange(3,5))
        res=random.randint(3,17)*"#"
        return {'name':name,'res':res}
    def weight(shit):
        name=shit['name']
        size=len(shit['res'])
        print("%s la <%s>kg"%(name,size))
    
    if __name__=="__main__":
        pool=ThreadPoolExecutor(10)
        shit1=pool.submit(la,'user1').result()#wait run
        weight(shit1)
        shit2=pool.submit(la,'user2').result()#wait run
        weight(shit2)
        shit3 = pool.submit(la, 'user3').result()  # wait run
        weight(shit3)
    View Code

    异步调用:提交完任务后,不在原地等待任务执行完毕

    from concurrent.futures import ThreadPoolExecutor
    import time,random
    def la(name):
        print("%s is laing" % name)
        time.sleep(random.randrange(3,5))
        res=random.randint(3,17)*"#"
        return {'name':name,'res':res}
    def weight(shit):
        shit=shit.result()#result() return func value
        name=shit['name']
        size=len(shit['res'])
        print("%s la <%s>kg"%(name,size))
    
    if __name__=="__main__":
        pool=ThreadPoolExecutor(10)
        pool.submit(la,'user1').add_done_callback(weight)#bind callback func
        pool.submit(la,'user2').add_done_callback(weight)
        pool.submit(la, 'user3').add_done_callback(weight)
    View Code

    user1 is laing
    user2 is laing
    user3 is laing
    user1 la <12>kg
    user2 la <14>kg
    user3 la <10>kg

    阻塞与非阻塞:进程运行的一种状态,同步调用和阻塞没有任何关系。

  • 相关阅读:
    不为人知easy-mock-cli
    javascript设计模式之适配器模式
    js --装饰者模式
    使用策略模式封装拦截器
    js --桥接模式
    深入理解面向对象 -- 基于 JavaScript 实现
    设计模式 -- 观察者模式
    敏捷开发
    从技术走向管理
    Vue Cli安装以及使用
  • 原文地址:https://www.cnblogs.com/yaya625202/p/9048389.html
Copyright © 2011-2022 走看看