python之多进程和多线程的使用场景(计算密集型、IO密集型)
关于多进程和多线程——很多人可能会很纳闷,这两个的有什么区别吗?为什么还要分两种?
下边我将给大家进行举例展示,剖析二者:
计算密集型:单个进程的多线程并发VS多个进程的并发并行
from threading import Thread
from multiprocessing import Process
import time
import random
def task():
count = 0
for i in range(200000000): # 这里运算的数量越大,差距越明显
count += 1
if __name__ == "__main__":
# 多进程的并发,并行
start_time = time.time()
l1 = []
for i in range(5):
p = Process(target=task)
p.start()
l1.append(p)
for p in l1:
p.join()
print(f"执行效率{time.time()-start_time}") # 执行效率9.980311870574951
# 多线程的并发并行
# start_time = time.time()
# l1 = []
# for i in range(5):
# p = Thread(target=task)
# p.start()
# l1.append(p)
#
# for p in l1:
# p.join()
# print(f"执行效率{time.time()-start_time}") # 执行效率38.803406953811646
总结:计算密集型,多进程的并发或并行效率更高。
再来看看IO密集型:单个进程的多线程并发VS所个进程的并发并行:
from threading import Thread
from multiprocessing import Process
import time
import random
def task():
count = 0
time.sleep(random.randint(1,3))
if __name__ == "__main__":
# 多进程的并发,并行
start_time = time.time()
l1 = []
for i in range(1000):
p = Process(target=task)
p.start()
l1.append(p)
for p in l1:
p.join()
print(f"执行效率{time.time()-start_time}") #执行效率13.508974075317383
# 多线程的并发并行
start_time = time.time()
l1 = []
for i in range(1000):
p = Thread(target=task)
p.start()
l1.append(p)
for p in l1:
p.join()
print(f"执行效率{time.time()-start_time}") #执行效率3.1451008319854736
总结:对于IO密集型:单个进程的多线程的并发效率高。