Python多进程与单进程的速度比较

4

我发现了一些与Python多进程相关的行为,但我很难理解。

使用Pool时,即使只有一个进程,它的性能也会更快。

为什么会这样呢?是因为多进程可以对代码进行优化吗?

import time
from multiprocessing import Pool


fib_input = [24] * 10

def fib(n):
    if n in [0,1]:
        return 1
    return fib(n-1)+fib(n-2)


def main1():
    with Pool(processes=1) as p:
        results = p.map(fib, fib_input)
    print (results)


def main2():
    results = list(map(fib, fib_input))
    print (results)


if __name__ == "__main__":
    start_time = time.time()
    main1()
    print("--- %s seconds ---" % (time.time() - start_time))

    start_time = time.time()
    main2()
    print("--- %s seconds ---" % (time.time() - start_time))

输出:

[75025, 75025, 75025, 75025, 75025, 75025, 75025, 75025, 75025, 75025]
--- 0.47702741622924805 seconds ---
[75025, 75025, 75025, 75025, 75025, 75025, 75025, 75025, 75025, 75025]
--- 7.922452926635742 seconds ---

在我的电脑上,我发现 main2() 更快:[75025, 75025, 75025, 75025, 75025, 75025, 75025, 75025, 75025, 75025] --- 0.426348924637 秒 --- [75025, 75025, 75025, 75025, 75025, 75025, 75025, 75025, 75025, 75025] --- 0.31747508049 秒 --- - Amit Kumar Gupta
@AmitKumarGupta 和我一样,0.23288583755493164秒对比 0.1788322925567627秒 - Daniil Ryzhkov
类似于我 - 第一次:0.4335339069366455秒 第二次:0.25878310203552246秒 - Elisha
太棒了,伙计们!这正是我所期待的。 那么问题出在设置上吗? 我正在Windows上使用Python 3.5.1 64位。 - MattZ
1个回答

0

好的。感谢评论,我找出了我的错误。谢谢大家!

一个新人的错误。

我使用 Visual Studio PTVS。 这就是减速来自的地方。 我已经将下拉菜单“构建”更改为Release,但按f5仍在运行调试模式,而我却确信这是一次干净的运行。

在cmd外部运行它解决了问题。 后来我发现ctrl-f5也可以在没有调试的情况下启动。

感谢帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接