面向对象编程之Python学习并行计算四
当前的计算机大多是多内核的CPU,对于一些易并行问题可以使用Python轻松实现并行编程,提高计算速度。
可以如下了解计算机有多少内核:
>>>from multiprocessing import cpu_count
>>>cpu_count()
4
以下是一个使用随机函数计算圆周率的例子:
import random
from multiprocessing import Pool
from os import getpid
from time import time
def length(size):
count=0.0
for i in range(size):
x=random.random()
y=random.random()
if(x*x+y*y<1.0):
count=count+1.0
print('Process {} handling {}'.format(getpid(),size))
print(count*4.0/size)
return count*4/size
pool=Pool(4) #A: pool=Pool(1)
t1=time()
res=pool.map(length,[100000,100000,100000,100000]) # B:[400000]
t2=time()
print('Time:={}'.format(t2-t1))
本机测试中,在4进程下时间是:0.05~0.07,2进程是:0.11~0.13,1进程是:0.20~0.24.
注:程序中A处和B处注意保持一致,即A处进程数多少,B处列表长度相应改变,元素值也相应调整。