1
我希望這不是一個重複的問題。運行函數的不同方式之間的性能差異
我已經運行在Python 3.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)
我看到的是,簡單的解決方案比多處理的速度更快:
Duration with Simple solution: 2.8359994757920504e-05
Duration with Multi processing solution: 0.012581961986143142
設置多個進程存在開銷。在這種情況下,簡單的解決方案非常快速,並且切換到多處理以實現如此小的集合大小沒有任何好處。隨着數字長度的增加,這可能會改變。 – nbryans
爲什麼使用'enumerate()'?你永遠不會使用'index'變量,所以你可以直接說'數字中的數字:'。 – reynoldsnlp
謝謝@nbryans –