用Python与Pool.Map()进行并行编程比较MAC OSX&;视窗10
在Python3.X中搜索各种可能的多处理之后,这个程序非常简单 在MAC和Windows上运行该程序可获得不同的结果。MAC的并行处理比串行处理花费的时间更少。我阅读了关于IPC开销等的各种注释,因为这是一个需要处理的微不足道的函数,但比为什么在MacOSX上的结果要好得多 基本上,了解MacOSX体系结构以处理Pool.MAP()的人可以提供输入。提前谢谢用Python与Pool.Map()进行并行编程比较MAC OSX&;视窗10,python,python-multiprocessing,Python,Python Multiprocessing,在Python3.X中搜索各种可能的多处理之后,这个程序非常简单 在MAC和Windows上运行该程序可获得不同的结果。MAC的并行处理比串行处理花费的时间更少。我阅读了关于IPC开销等的各种注释,因为这是一个需要处理的微不足道的函数,但比为什么在MacOSX上的结果要好得多 基本上,了解MacOSX体系结构以处理Pool.MAP()的人可以提供输入。提前谢谢 **On MAC OSX** cpu_count() = 4 Creating pool with 4 processes pool =
**On MAC OSX**
cpu_count() = 4
Creating pool with 4 processes
pool = <multiprocessing.pool.Pool object at 0x1019d96a0>
Time for y_parallel = 2.866562843322754
Time for y_serial = 10.207499027252197
**On Windows**
cpu_count() = 4
Creating pool with 4 processes
pool = <multiprocessing.pool.Pool object at 0x031A1CD0>
Time for y_parallel = 13.155309915542603
Time for y_serial = 10.025831460952759
import multiprocessing
import time
def f(x):
time.sleep(0.1)
return x+1
# Serially adding 100 numbers (X+1) to y_serial
y_serial = []
x = range(100)
startTime_serial = time.time()
#for i in x:
# y_serial = y_serial + [f(i)]
y_serial += map(f,x)
endTime_serial = time.time()
#Letting Pool allocate processes through map.Pool
if __name__ == '__main__':
print('cpu_count() = %d' % multiprocessing.cpu_count())
PROCESSES = multiprocessing.cpu_count()
print('Creating pool with %d processes' % PROCESSES)
pool = multiprocessing.Pool()
print('pool = %s' % pool)
startTime_parallel = time.time()
y_parallel = pool.map(f,x)
pool.close()
pool.join()
endTime_parallel = time.time()
print("Time for y_parallel = ", endTime_parallel - startTime_parallel)
print ("Time for y_serial = ", endTime_serial - startTime_serial)
print ("y_parallel", y_parallel)
print ("y_serial=", y_serial)
MAC OSX上的****
cpu_计数()=4
创建包含4个进程的池
池=
y_并联时间=2.866562843322754
y_序列的时间=10.20749027252197
**在窗户上**
cpu_计数()=4
创建包含4个进程的池
池=
y_并联时间=13.155309915542603
y_序列的时间=10.025831460952759
导入多处理
导入时间
def f(x):
睡眠时间(0.1)
返回x+1
#连续向y_序列添加100个数字(X+1)
y_serial=[]
x=范围(100)
startTime\u serial=time.time()
#对于x中的i:
#y_serial=y_serial+[f(i)]
y_serial+=map(f,x)
endTime_serial=time.time()
#允许池通过map.Pool分配进程
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
打印('cpu\u count()=%d'%multiprocessing.cpu\u count())
进程=多处理。cpu\u计数()
打印('正在创建具有%d个进程“%1个进程”的池)
池=多处理。池()
打印('pool=%s'%pool]
startTime\u parallel=time.time()
y_parallel=pool.map(f,x)
pool.close()
pool.join()
endTime_parallel=time.time()
打印(“y_并行时间=”,endTime_并行-startTime_并行)
打印(“y_序列的时间=,endTime_序列-startTime_序列)
打印(“y_平行”,y_平行)
打印(“y_serial=”,y_serial)