• 异步调用与回调机制


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

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

    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

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

  • 相关阅读:
    DataGrid数据格式设置表达式
    删除确认按钮
    获取CpuID
    R0~R31寄存器
    动态改变asp.net网页的标题
    使用"Infragistics"问题集
    Read Cpu Id
    操作DataRow记录
    用Javascript创建"后退"按钮
    日历控件的“星期几”变为“几”
  • 原文地址:https://www.cnblogs.com/yaya625202/p/9048389.html
Copyright © 2020-2023  润新知