为什么这个代码中的Python多进程更慢?
我有一段示例代码。我在做一些数学计算(图论),想提高速度,所以决定使用多进程,但让我惊讶的是,这段代码的运行速度竟然比单进程版本还慢。
我本以为,如果你有一个列表,把它分成两半,然后启动两个进程,应该大约能节省一半的时间。我觉得我没有什么同步问题,那为什么会这么慢呢?
from multiprocessing import Process, Queue
def do_work(queue, aList):
for elem in aList:
newList.append(a_math_function(elem))
queue.put(max(newList))
return max(newList)
def foo():
#I have let's say aList with 100000 objects
q1 = Queue(); q2 = Queue()
p1 = Process(target=do_work, args=[q1, aList[0: size/2])])
p2 = Process(target=do_work, args=[q2, aList[size/2+1: size])])
p1.start(); p2.start()
p1.join(); p2.join()
print(max(q1.get(),q2.get())
2 个回答
2
使用 multiprocessing.Pool.map() 可以把工作分配给多个工人(也就是多个进程),然后把结果汇总到一起。
下面有个例子,具体可以查看这里 http://docs.python.org/library/multiprocessing.html#multiprocessing.pool.AsyncResult.successful
3
与其使用多进程,不如尝试减少你分配的内存量。你现在只是把临时列表填满了内存,比如你传给进程的aList的两半,还有你在每个进程中创建的新列表newList。这很可能是导致运行速度慢的原因,因为大量的内存分配会产生很多垃圾,需要清理。
试着用下面的代码替换你所有的代码,然后测一下速度。
def foo():
print max(a_math_function(x) for x in aList)