我试图用多处理模块来加速我的python程序,但我发现它相当慢。
玩具示例如下:import time
from multiprocessing import Pool, Manager
class A:
def __init__(self, i):
self.i = i
def score(self, x):
return self.i - x
class B:
def __init__(self):
self.i_list = list(range(1000))
self.A_list = []
def run_1(self):
for i in self.i_list:
self.x = i
map(self.compute, self.A_list) #map version
self.A_list.append(A(i))
def run_2(self):
p = Pool()
for i in self.i_list:
self.x = i
p.map(self.compute, self.A_list) #multicore version
self.A_list.append(A(i))
def compute(self, some_A):
return some_A.score(self.x)
if __name__ == "__main__":
st = time.time()
foo = B()
foo.run_1()
print("Map: ", time.time()-st)
st = time.time()
foo = B()
foo.run_2()
print("MultiCore: ", time.time()-st)
我的电脑(Windows10,Python3.5)的结果是
地图:0.0009996891021728516
多芯:19.34994912147522
在Linux机器(centos7,python3.6)上也可以看到类似的结果。在
我想这是由进程间对象的酸洗/脱粘引起的?我试图使用管理器模块,但未能使其正常工作。在
任何帮助都将不胜感激。在