我编写了以下代码来在计算机上测试Python的多处理能力:

from multiprocessing import Pool

var = range(5000000)
def test_func(i):
    return i+1

if __name__ == '__main__':
    p = Pool()
    var = p.map(test_func, var)

我使用Unix的time命令对此进行了计时,结果是:
real 0m2.914s
user 0m4.705s
sys  0m1.406s

然后,使用我定时的相同vartest_func():
var = map(test_func, var)

结果是
real 0m1.785s
user 0m1.548s
sys  0m0.214s

多处理代码是否应该比普通的map快得多?

最佳答案

为什么要这样。

在map函数中,您只是按顺序调用该函数。

多处理池创建了一组将要映射您的任务的工作程序。
它正在协调多个工作进程来运行这些功能。

尝试在函数内部做一些重要的工作,然后为它们计时,看看多处理是否可以帮助您更快地进行计算。

您必须了解使用多处理会产生开销。只有在计算工作量显着大于这些开销的情况下,您才能看到它的好处。

请参阅Hellmann精彩介绍中的最后一个示例:http://www.doughellmann.com/PyMOTW/multiprocessing/communication.html

pool_size = multiprocessing.cpu_count() * 2
pool = multiprocessing.Pool(processes=pool_size,
                            initializer=start_process,
                            maxtasksperchild=2,
                            )
pool_outputs = pool.map(do_calculation, inputs)

您可以根据拥有的核心来创建池。

关于Python多处理速度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11229739/

10-12 23:24