并行计算的方法有许多,在科学计算中“单指令多数据”式的线程级别的并行计算经常使用,可以显著提升代码执行循环语句的速度。
python内置的multiprocessing
库可以实现循环语句的并行化,不过这里使用的是map
而不是for
,其本质相同。
并行化的核心代码就两行:
with Pool(thread_num) as p:
outputs = p.map(dosomething, inputs)# 调用dosomething,将自变量向量转变为因变量向量
thread_num是线程数量
map方法可将inputs列表映射到outputs列表,映射关系由dosomething函数定义
from multiprocessing import Pool
import time
# 任意函数
def dosomething(input):
for i in range(100000):
i += 1
print(input)
return input
# 函数自变量向量
inputs = [i for i in range(0,1000)]
T1 = time.time()
thread_num=6 # 调用线程数量
with Pool(thread_num) as p:
outputs = p.map(dosomething, inputs)# 调用dosomething,将自变量向量转变为因变量向量
T2 = time.time()
print('程序运行时间:%s秒' % ((T2 - T1)))
计算可知thread_num=6
耗时0.55秒,而thread_num=1
耗时2.48秒,提速比达到4.5