我尝试使用多处理模块加速我的 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)
我的计算机(Windows 10,Python 3.5)上的结果是
地图:0.0009996891021728516
多核:19.34994912147522
在 Linux 机器(CentOS 7、Python 3.6)上可以观察到类似的结果。
我猜这是由进程之间的对象的酸洗/去皮引起的?我尝试使用 Manager 模块,但未能使其正常工作。
任何帮助将不胜感激。