我有这段代码,我试图在前面的question的基础上进行并行处理。下面是使用2个进程的代码。在
import multiprocessing
import timeit
start_time = timeit.default_timer()
d1 = dict( (i,tuple([i*0.1,i*0.2,i*0.3])) for i in range(500000) )
d2={}
def fun1(gn):
x,y,z = d1[gn]
d2.update({gn:((x+y+z)/3)})
#
if __name__ == '__main__':
gen1 = [x for x in d1.keys()]
#fun1(gen1)
p= multiprocessing.Pool(2)
p.map(fun1,gen1)
print('Script finished')
stop_time = timeit.default_timer()
print(stop_time - start_time)
输出为:
^{pr2}$如果我把程序改成顺序的
fun1(gen1)
#p= multiprocessing.Pool(2)
#p.map(fun1,gen1)
输出为:
Script finished
0.8345944193950299
所以并行循环比顺序循环花费更多的时间,超过了两倍。(我的电脑有两个内核,运行在Windows上)我试着在这个主题上找到类似的问题,this和this,但找不出原因。在这个例子中,如何使用多处理模块来提高性能?在
当您执行
p.map(fun1,gen1)
操作时,您将gen1
发送到另一个进程。这包括序列化500000个元素的列表。在与小型计算相比,序列化需要更长的时间。在
您可以测量或
profile
在哪里花费时间。在相关问题 更多 >
编程相关推荐