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)
私は何を見ることは簡単な解決策は、マルチプロセッシング1よりも高速であるということである。
Duration with Simple solution: 2.8359994757920504e-05
Duration with Multi processing solution: 0.012581961986143142
複数のプロセスを設定する際にオーバーヘッドがあります。この場合、単純な解決策は非常に迅速であり、そのような小さいセットサイズのためのマルチプロセッシングへの切り替えは利点を示さない。数字の長さが増えるにつれて、これが変わる可能性があります*。 – nbryans
なぜ 'enumerate()'を使うのですか?あなたは決して 'index'変数を使うことはありません。 – reynoldsnlp
ありがとう@nbryans –