往期文章:
如果遇到了CPU密集型计算,多线程反而会降低执行速度。mutilprocessing模块就是python为了解决GIL缺陷引入的一个模块,原理是用多进程在多CPU上并行执行。
❝上图的上面展示的是一个多线程执行的过程,主要通过并行IO和CPU来提高执行速度,但是对于CPU密集型运算,即上图的下面部分,一直都需CPU计算,则线程的切换耽误时间,导致多线程反而没有多线程速度快。
❞
这里判断100个大数 是否为素数?分别对比了单线程,多线程,多进程的效率。
import math
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
import time
num_list = [112272535095293] * 100
def is_prime(num):
"""
判断是不是素数
"""
if num < 2:
return False
if num == 2:
return True
if num % 2 == 0:
return False
sqrt_n = int(math.floor(math.sqrt(num)))
for i in range(3,sqrt_n+1,2):
if num % i == 0:
return False
return True
# 单线程
def single_thread():
for num in num_list:
is_prime(num)
#多线程
def multi_thread():
with ThreadPoolExecutor() as pool:
pool.map(is_prime,num_list)
# 多进程
def multi_process():
with ProcessPoolExecutor() as pool:
pool.map(is_prime,num_list)
if __name__ == "__main__":
start = time.time()
single_thread()
end = time.time()
print('单线程:', end - start, '秒')
start = time.time()
multi_thread()
end = time.time()
print('多线程:', end - start, '秒')
start = time.time()
multi_process()
end = time.time()
print('多进程', end - start, '秒')
运行结果如下:
联系客服