zoukankan      html  css  js  c++  java
  • 同步异步

    同步异步

    程序的运行状态:阻塞和非阻塞

    处理任务的方式:并行,并发,串行

    提交任务的方式:同步,异步

    同步

    指的是 提交任务后必须在原地等待 直到任务结束

    异步

    提交任务后不需要在原地等待 可以继续往下执行代码

    异步效率高于同步 ,异步任务将导致一个问题 就是 任务的发起方不知道任务何时 处理完毕

    解决方法:

    ​ 1.轮询 重复的隔一段时间就问一次

    		效率低 无法及时获取结果  不推荐
    

    ​ 2.让任务的执行方主动通知 (异步回调)

    ​ 可以及时拿到任务的结果 推荐方式

    异步调用案例:

    #线程异步回调
    from threading import Thread
    
    def task(callback):
    
        print('run')
    
    
        # time.sleep(5)
        for i in range(100000000):
            1+1
        callback('ok')
    
    def finish(res):
        print('任务完成',res)
    
    print('start')
    
    t = Thread(target=task,args=(finish,))
    t.start()
    print('over')
    
    
    

    ​ 使用案例:

    #线程池以异步提交任务方式
    from concurrent.futures import ThreadPoolExecutor
    import time
    
    def task():
        time.sleep(3)
        print('son thread run')
        return 'ok'
    
    def callback(arg):
        print('任务执行完成',arg)
        print('任务结果:',arg.result())
    
    #创建线程池
    pool = ThreadPoolExecutor(2)
    
    res = pool.submit(task) #异步提交方式
    
    # print(res)  #<Future at 0x2dc4c605630 state=running>
    
    # print(res.result())     #但是result是个阻塞函数,直到子线程任务结束
    
    res.add_done_callback(callback)   #绑定回调函数,线程池调用回调函数时,默认附加个参数
    
    print('main thread')
    
    
    #线程池具体使用
    from concurrent.futures import ThreadPoolExecutor
    import time
    
    #定义任务函数
    def task(num):
        time.sleep(1)
        print(num)
        return 'hello world'
    
    #定义回调函数
    def callback(obj):
        print(obj.result())
    
    #创建线程池
    pool = ThreadPoolExecutor(2)
    
    #submit提交任务
    res = pool.submit(task,123)     #对task传参123作为num
    
    #绑定回调函数
    res.add_done_callback(callback)
    
    print('over')
    
    
  • 相关阅读:
    Web开发实用网站资源
    Web开发实用网站资源
    Ubuntu的LAMP与相关软件安装设置
    Ubuntu的LAMP与相关软件安装设置
    试除法求最小N个素数之二
    试除法求最小N个素数之二
    Python程序-输出1000以内素数
    Python程序-输出1000以内素数
    Ubuntu安装MPICH3集群计算环境
    Ubuntu安装MPICH3集群计算环境
  • 原文地址:https://www.cnblogs.com/bruce123/p/11184432.html
Copyright © 2011-2022 走看看