Python 运行函数的不同方式之间的性能差异
我希望这不是一个重复的问题 我在Python3.4.2中以简单的方式和多处理的方式运行了相同的函数,我发现简单的方式更快。也许我的设计不好,但我看不出问题出在哪里 下面是我的代码: 通用部分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 """
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()
?您从不使用索引
变量,因此您最好对数字中的数字说:
。