【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 秒

 

转载于:https://www.cnblogs.com/zydeboke/p/11305261.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值