【问题标题】:Pooled processes are slower when compared to non-pool与非池相比,池化进程更慢
【发布时间】:2013-08-04 06:02:06
【问题描述】:

我是 python 的新手,我正在尝试将多处理用于我的应用程序。 我实际上有一个非常简单的乘法程序,我试图异步生成并行过程来计算一系列数字的乘法。当我尝试在不合并的情况下执行此操作时,时间至少要快两倍或几倍甚至快 4 倍。我不确定这种行为的原因是什么。

我正在使用 python 2.7.1

非池.py

#!/usr/bin/python

import time

def f(x):
        return x*x

st = time.time()
t = 10000000
f(t)
map(f, range(t))

et = time.time()
tt = (str((et-st)%60)+'--'+str((et-st/60)))

print tt

池.py

#!/usr/bin/python

from multiprocessing import Pool
import time

def f(x):
        return x*x

st = time.time()
t = 10000000

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

et = time.time()
tt = (str((et-st)%60)+'--'+str((et-st/60)))

print tt

exit(0)

执行时间:(格式>>分--秒)

Macha-MacBook-Pro:Downloads me$ ./nonpool.py 
2.03456997871--1352551406.28
Macha-MacBook-Pro:Downloads me$ ./pool.py 
4.69528508186--1352551417.28

【问题讨论】:

  • 可能是因为创建子进程和与子进程通信的成本比仅仅在进程中执行操作要高很多。 (只有在做比“平方数”更复杂的事情时,您可能会看到性能提升。)经过的时间还很大程度上取决于您可用的处理器/内核的数量——您创建的工作进程的数量通常应该与计算机中的处理器数量相同。

标签: python python-2.7 multiprocessing pool


【解决方案1】:

您可以查看相关答案,例如python prime crunching: processing pool is slower? -- 设置处理池的开销很高,但在参数和结果中发送和接收单个整数也是如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-02
    • 2016-03-02
    • 1970-01-01
    • 2021-01-29
    • 2011-10-21
    • 2018-07-11
    • 2016-05-21
    • 2018-05-14
    相关资源
    最近更新 更多