• 多线程与多进程的比较


    多线程适合于多io操作

    多进程适合于耗cpu(计算)的操作

    # 多进程编程
    # 耗cpu的操作,用多进程编程, 对于io操作来说,使用多线程编程
    import time
    from  concurrent.futures import ThreadPoolExecutor, as_completed
    from  concurrent.futures import ProcessPoolExecutor
    
    
    def fib(n):
        if n <= 2:
            return 1
        return fib(n - 2) + fib(n - 1)
    
    if __name__ == '__main__':
    
        # 1. 对于耗cpu操作,多进程优于多线程
    
        # with ThreadPoolExecutor(3) as executor:
        #     all_task = [executor.submit(fib, num) for num in range(25, 35)]
        #     start_time = time.time()
        #     for future in as_completed(all_task):
        #         data = future.result()
        #         print(data)
        #     print("last time :{}".format(time.time() - start_time))  # 3.905290126800537
    
    
        
        # 多进程 ,在window环境 下必须放在main方法中执行,否则抛异常
        with ProcessPoolExecutor(3) as executor:
            all_task = [executor.submit(fib, num) for num in range(25, 35)]
            start_time = time.time()
            for future in as_completed(all_task):
                data = future.result()
                print(data)
            print("last time :{}".format(time.time() - start_time))  # 2.6130592823028564

    可以看到在耗cpu的应用中,多进程明显优于多线程     2.6130592823028564 < 3.905290126800537

    下面模拟一个io操作

    # 多进程编程
    # 耗cpu的操作,用多进程编程, 对于io操作来说,使用多线程编程
    import time
    from  concurrent.futures import ThreadPoolExecutor, as_completed
    from  concurrent.futures import ProcessPoolExecutor
    
    def io_operation(n):
        time.sleep(2)
        return n
    
    
    if __name__ == '__main__':
    
        # 1. 对于耗cpu操作,多进程优于多线程
    
        # with ThreadPoolExecutor(3) as executor:
        #     all_task = [executor.submit(io_operation, num) for num in range(25, 35)]
        #     start_time = time.time()
        #     for future in as_completed(all_task):
        #         data = future.result()
        #         print(data)
        #     print("last time :{}".format(time.time() - start_time))  # 8.00358772277832
    
    
    
        # 多进程 ,在window环境 下必须放在main方法中执行,否则抛异常
        with ProcessPoolExecutor(3) as executor:
            all_task = [executor.submit(io_operation, num) for num in range(25, 35)]
            start_time = time.time()
            for future in as_completed(all_task):
                data = future.result()
                print(data)
            print("last time :{}".format(time.time() - start_time))  # 8.12435245513916
    可以看到 8.00358772277832 < 8.12435245513916, 即是多线程比多进程更牛逼!
  • 相关阅读:
    对javascript的一点点认识总结——《javascript高级程序设计》读书笔记
    .Net Garbage Collection学习心得
    上网本重装系统的历程
    让验证控件进行分组验证
    .net应用程序分层的个人认识
    asp.net 4.0的变化(官网链接地址)
    SQL 延时 插入 修改 删除
    SQL 删除前100条 with as
    jQuery RadioButtonList
    网站推广的100个方法
  • 原文地址:https://www.cnblogs.com/z-qinfeng/p/12064012.html
Copyright © 2020-2023  润新知