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')
    
    
  • 相关阅读:
    MyBatis-Generator 最佳实践
    Http请求工具
    多线程编程-之并发编程:阻塞队列
    如数据不存在就插入,存在就更新
    MySQL触发器
    13.multi_match实现dis_max+tie_breaker
    12. tie_breaker的使用原因和使用方法
    11.best fields策略(dis_max参数设置)
    10.多shard场景下relevence score可能不准确
    9.boost权重控制
  • 原文地址:https://www.cnblogs.com/bruce123/p/11184432.html
Copyright © 2011-2022 走看看