首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >multiprocessing.Pool示例

multiprocessing.Pool示例
EN

Stack Overflow用户
提问于 2010-12-11 06:21:33
回答 2查看 74.4K关注 0票数 28

我正在学习如何使用multiprocessing,并且找到了the following example

我想要将这些值求和如下:

代码语言:javascript
复制
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值的总和。

EN

回答 2

Stack Overflow用户

发布于 2010-12-11 13:09:59

如果你打算像那样使用apply_async,那么你必须使用某种共享内存。此外,您需要放置启动多进程的部分,以便只在初始脚本调用时才执行多进程,而不是池化进程。这里有一种使用map实现此功能的方法。

代码语言:javascript
复制
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
票数 21
EN

Stack Overflow用户

发布于 2013-06-08 23:03:27

下面是我在python example documentation中找到的最简单的示例

代码语言:javascript
复制
from multiprocessing import Pool

def  f(x):
    return x*x

if __name__ == '__main__':
    pool = Pool(processes=4)              # start 4 worker processes
    result = pool.apply_async(f, [10])    # evaluate "f(10)" asynchronously
    print result.get(timeout=1)           # prints "100" unless your computer is *very* slow
    print pool.map(f, range(10))          # prints "[0, 1, 4,..., 81]"

这很简单,连我都能理解。

注意,result.get()是触发计算的因素。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4413821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档