zoukankan      html  css  js  c++  java
  • 同步调用与异步调用

    提交任务的两种方式:同步调用与异步调用

    同步调用

    # 同步调用:提交任务后,就在原地等待任务执行完毕,拿到结果,再执行下一行代码.导致程序是串行执行
    import time
    import random
    from concurrent.futures import ThreadPoolExecutor
    
    
    def work(name):
        print("%s is working" % name)
        time.sleep(random.randint(7, 13))
        res = random.randint(7, 13) * "#"
        return {"name": name, "res": res}
    
    
    def weigh(job):
        name = job["name"]
        size = len(job["res"])
        print("%s 工作量 <%s>" % (name, size))
    
    
    if __name__ == "__main__":
        pool = ThreadPoolExecutor(13)    # 人员数目
    
        job1 = pool.submit(work, "alex").result()
        weigh(job1)
        job2 = pool.submit(work, "jack").result()
        weigh(job2)
        job3 = pool.submit(work, "egon").result()
        weigh(job3)
    

      使程序编程串行

    异步调用

    # 异步调用:提交完任务后,不等待任务执行完毕,
    import time
    import random
    from concurrent.futures import ThreadPoolExecutor
    
    
    def work(name):
        print("%s is working" % name)
        time.sleep(random.randint(7, 13))
        res = random.randint(7, 13) * "#"
        return {"name": name, "res": res}
    
    
    def weigh(job):
        job = job.result()
        name = job["name"]
        size = len(job["res"])
        print("%s 工作量 <%s>" % (name, size))
    
    
    if __name__ == "__main__":
        pool = ThreadPoolExecutor(13)    # 人员数目
    
        job1 = pool.submit(work, "alex").add_done_callback(weigh)    # pool.submit(work, "alex")这个对象当作结果传给weigh
        job2 = pool.submit(work, "jack").add_done_callback(weigh)
        job3 = pool.submit(work, "egon").add_done_callback(weigh)
    

    阻塞:是进程运行的一种状态,进程运行是碰到I/O就进行阻塞状态,会被剥夺走cpu的执行权限。

    同步不同于阻塞,同步:是提交任务的一种方式,如果提交的任务是一个纯计算的同步,没有I/O,提交后要等,没有阻塞。

  • 相关阅读:
    (8) MySQL主从复制架构使用方法
    (7) MySQL数据库备份详解
    (6) MySQL慢查询日志的使用
    解决通过Nginx转发的服务请求头header中含有下划线的key,其值取不到的问题
    (5) 电商场景下的常见业务SQL处理
    (4) MySQL中EXPLAIN执行计划分析
    (3) MySQL分区表使用方法
    (2) 电商数据库表设计
    (1) Mysql高性能优化规范建议
    linux每日命令(39):lsof命令
  • 原文地址:https://www.cnblogs.com/fantsaymwq/p/10134640.html
Copyright © 2011-2022 走看看