Python 运行函数的不同方式之间的性能差异

Python 运行函数的不同方式之间的性能差异,python,performance,Python,Performance,我希望这不是一个重复的问题 我在Python3.4.2中以简单的方式和多处理的方式运行了相同的函数,我发现简单的方式更快。也许我的设计不好,但我看不出问题出在哪里 下面是我的代码: 通用部分 import os import math from multiprocessing import Process import timeit def exponential(number): """ A function that returns exponential """

我希望这不是一个重复的问题

我在Python3.4.2中以简单的方式和多处理的方式运行了相同的函数,我发现简单的方式更快。也许我的设计不好,但我看不出问题出在哪里

下面是我的代码:

通用部分

import os
import math
from multiprocessing import Process
import timeit


def exponential(number):
    """
    A function that returns exponential
    """
    result = math.exp(number)
    proc = os.getpid()
简单解决方案

if __name__ == '__main__':

    start = timeit.default_timer()
    numbers = [5, 10, 20, 30, 40, 50, 60]

    for index, number in enumerate(numbers):
        exponential(number)

    stop = timeit.default_timer()
    duration = stop - start
    print(duration)
if __name__ == '__main__':
    start = timeit.default_timer()
    numbers = [5, 10, 20, 30, 40, 50, 60]
    procs = []

    for index, number in enumerate(numbers):
        proc = Process(target=exponential, args=(number,))
        procs.append(proc)
        proc.start()

    for proc in procs:
        proc.join()

    stop = timeit.default_timer()
    duration = stop - start
    print(duration)
多处理解决方案

if __name__ == '__main__':

    start = timeit.default_timer()
    numbers = [5, 10, 20, 30, 40, 50, 60]

    for index, number in enumerate(numbers):
        exponential(number)

    stop = timeit.default_timer()
    duration = stop - start
    print(duration)
if __name__ == '__main__':
    start = timeit.default_timer()
    numbers = [5, 10, 20, 30, 40, 50, 60]
    procs = []

    for index, number in enumerate(numbers):
        proc = Process(target=exponential, args=(number,))
        procs.append(proc)
        proc.start()

    for proc in procs:
        proc.join()

    stop = timeit.default_timer()
    duration = stop - start
    print(duration)
我看到的是,简单的解决方案比多处理解决方案更快:

简单解决方案持续时间:2.8359994757920504e-05
多处理解决方案的持续时间:0.012581961986143142

计算
math.exp(x)
,其中x设置多个进程的开销很大。在这种情况下,简单的解决方案非常快,对于如此小的集合大小,切换到多处理并没有任何好处。随着数字长度的增加,这可能会发生变化。为什么要使用
enumerate()
?您从不使用
索引
变量,因此您最好对数字中的数字说