zoukankan      html  css  js  c++  java
  • 【10.8】多线程和多进程的比较

     1 #!/user/bin/env python
     2 # -*- coding:utf-8 -*-
     3 from concurrent.futures import ThreadPoolExecutor, as_completed
     4 from concurrent.futures import ProcessPoolExecutor
     5 import time
     6 
     7 # 消耗cpu的操作,用多进程编程,对于io操作来说,使用多线程编程,进程切换代价要高于线程
     8 
     9 # 1.对于耗费cpu的操作,计算
    10 
    11 
    12 def fib(n):
    13     if n <= 2:
    14         return 1
    15     return fib(n-1) + fib(n-2)
    16 
    17 
    18 # 在windows下,多进程编程一定需要放在if __name__ == '__main__':中,linux中不存在这个问题
    19 if __name__ == '__main__':
    20     # 实现了__enter__ 和 __exit__
    21     # 多线程
    22     with ThreadPoolExecutor(max_workers=3) as executor:
    23         all_task = [executor.submit(fib, (num)) for num in range(25, 35)]
    24         start_time = time.time()
    25         for future in as_completed(all_task):
    26             data = future.result()
    27             print('exe result {} '.format(data))
    28         thread_last_time = time.time() - start_time
    29         print('last time is {} '.format(thread_last_time))
    30 
    31     # 多进程
    32     with ProcessPoolExecutor(max_workers=3) as executor:
    33         all_task = [executor.submit(fib, (num)) for num in range(25, 35)]
    34         start_time = time.time()
    35         for future in as_completed(all_task):
    36             data = future.result()
    37             print('exe result {} '.format(data))
    38         process_last_time = time.time() - start_time
    39         print('last time is {} '.format(process_last_time))
    40 
    41     print('多进程比多线程快 {} 秒'.format(thread_last_time - process_last_time))
    exe result 75025 
    exe result 121393 
    exe result 196418 
    exe result 317811 
    exe result 514229 
    exe result 832040 
    exe result 1346269 
    exe result 2178309 
    exe result 3524578 
    exe result 5702887 
    last time is 4.179819107055664 
    exe result 75025 
    exe result 121393 
    exe result 196418 
    exe result 317811 
    exe result 514229 
    exe result 832040 
    exe result 1346269 
    exe result 2178309 
    exe result 3524578 
    exe result 5702887 
    last time is 2.224078893661499 
    多进程比多线程快 1.955740213394165 秒
    

    对于耗费cpu的操作,例如计算。多进程优于多线程

    对于io操作,多线程优于多进程

     1 #!/user/bin/env python
     2 # -*- coding:utf-8 -*-
     3 from concurrent.futures import ThreadPoolExecutor, as_completed
     4 from concurrent.futures import ProcessPoolExecutor
     5 import time
     6 
     7 # 消耗cpu的操作,用多进程编程,对于io操作来说,使用多线程编程,进程切换代价要高于线程
     8 
     9 # 2.对于io操作来说,多线程优于多进程
    10 
    11 
    12 def random_sleep(n):
    13     time.sleep(n)
    14     return n
    15 
    16 
    17 # 在windows下,多进程编程一定需要放在if __name__ == '__main__':中,linux中不存在这个问题
    18 if __name__ == '__main__':
    19     # 实现了__enter__ 和 __exit__
    20     # 多线程
    21     with ThreadPoolExecutor(max_workers=3) as executor:
    22         all_task = [executor.submit(random_sleep, (n)) for n in [2]*30]
    23         start_time = time.time()
    24         for future in as_completed(all_task):
    25             data = future.result()
    26             print('exe result {} '.format(data))
    27         thread_last_time = time.time() - start_time
    28         print('last time is {} '.format(thread_last_time))
    29 
    30     # 多进程
    31     with ProcessPoolExecutor(max_workers=3) as executor:
    32         all_task = [executor.submit(random_sleep, (n)) for n in [2]*30]
    33         start_time = time.time()
    34         for future in as_completed(all_task):
    35             data = future.result()
    36             print('exe result {} '.format(data))
    37         process_last_time = time.time() - start_time
    38         print('last time is {} '.format(process_last_time))
    39 
    40     print('多线程比多进程快 {} 秒'.format(process_last_time - thread_last_time))
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    last time is 20.007108688354492 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    exe result 2 
    last time is 20.16208267211914 
    多线程比多进程快 0.15497398376464844 秒
    
  • 相关阅读:
    Docker 学习4 Docker容器虚拟化网络概述
    Ceph 命令
    Day_09【常用API】扩展案例1_程序中使用一个长度为3的对象数组,存储用户的登录名和密码……
    Day_08【面向对象】扩展案例4_年龄为30岁的老王养了一只黑颜色的2岁的宠物……
    Day_08【面向对象】扩展案例3_使用多态的形式创建缉毒狗对象,调用缉毒方法和吼叫方法
    Day_08【面向对象】扩展案例2_测试旧手机新手机类,并给新手机实现玩游戏功能
    Day_08【面向对象】扩展案例1_测试项目经理类和程序员类
    用两个栈实现队列
    二叉树前序、中序、后序遍历相互求法
    洗牌
  • 原文地址:https://www.cnblogs.com/zydeboke/p/11305261.html
Copyright © 2011-2022 走看看