专门做杂志的网站/东莞网站自动化推广
我一直在尝试更多地了解Python的multiprocessing模块,并评估不同的流程之间的通信技术.我写的比较的性能的基准Pipe,Queue和Array(都来自multiprocessing)用于传递numpy进程之间的阵列.完整的基准可以在这里找到.以下是测试的片段Queue:
def process_with_queue(input_queue, output_queue):
source = input_queue.get()
dest = source**2
output_queue.put(dest)
def test_with_queue(size):
source = np.random.random(size)
input_queue = Queue()
output_queue = Queue()
p = Process(target=process_with_queue, args=(input_queue, output_queue))
start = timer()
p.start()
input_queue.put(source)
result = output_queue.get()
end = timer()
np.testing.assert_allclose(source**2, result)
return end - start
我在我的Linux笔记本电脑上运行了这个测试,并获得了数组大小为1000000的以下结果:
Using mp.Array: time for 20 iters: total=2.4869s, avg=0.12435s
Using mp.Queue: time for 20 iters: total=0.6583s, avg=0.032915s
Using mp.Pipe: time for 20 iters: total=0.63691s, avg=0.031845s
Array由于它使用共享内存并且可能不需要酸洗,我有点惊讶地看到表现如此糟糕,但我认为必须有一些numpy我无法控制的复制.
但是,我在Macbook上运行了相同的测试(数组大小为1000000),并得到以下结果:
Using mp.Array: time for 20 iters: total=1.6917s, avg=0.084587s
Using mp.Queue: time for 20 iters: total=2.3478s, avg=0.11739s
Using mp.Pipe: time for 20 iters: total=8.7709s, avg=0.43855s
真正的时间差异并不令人惊讶,因为当然不同的系统会表现出不同的性能.什么是如此令人惊讶的是在相对时间的差异.
有什么可以解释这个?这对我来说是一个非常令人惊讶的结果.看到Linux和Windows,OSX和Windows之间存在如此明显的差异,我不会感到惊讶,但我有点认为这些东西在OSX和Linux之间的表现非常相似.
这个问题解决了Windows和OSX之间的性能差异,这似乎更令人期待.