我编写了以下代码来在计算机上测试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
然后,使用我定时的相同
var
和test_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/