multiprocessing.Pool 示例

2022-01-12 00:00:00 python multiprocessing

问题描述

我正在尝试学习如何使用 multiprocessing,结果发现 下面的例子.

I'm trying to learn how to use multiprocessing, and found the following example.

我想对值求和如下:

from multiprocessing import Pool
from time import time

N = 10
K = 50
w = 0

def CostlyFunction(z):
    r = 0
    for k in xrange(1, K+2):
        r += z ** (1 / k**1.5)
    print r
    w += r
    return r

currtime = time()

po = Pool()

for i in xrange(N):
    po.apply_async(CostlyFunction,(i,))
po.close()
po.join()

print w
print '2: parallel: time elapsed:', time() - currtime

我无法得到所有 r 值的总和.

I can't get the sum of all r values.


解决方案

如果你要像这样使用 apply_async,那么你必须使用某种共享内存.此外,您需要放置启动多处理的部分,以便它仅在由初始脚本调用时完成,而不是池进程.这是使用地图的一种方法.

If you're going to use apply_async like that, then you have to use some sort of shared memory. Also, you need to put the part that starts the multiprocessing so that it is only done when called by the initial script, not the pooled processes. Here's a way to do it with map.

from multiprocessing import Pool
from time import time

K = 50
def CostlyFunction((z,)):
    r = 0
    for k in xrange(1, K+2):
        r += z ** (1 / k**1.5)
    return r

if __name__ == "__main__":
    currtime = time()
    N = 10
    po = Pool()
    res = po.map_async(CostlyFunction,((i,) for i in xrange(N)))
    w = sum(res.get())
    print w
    print '2: parallel: time elapsed:', time() - currtime

相关文章