python3のmultiprocessingについて
multiprocessingのPoolを使いましたが、使わないより遅いのはなぜでしょうか?
import time
from multiprocessing import Pool
def f(x):
return x*x
start = time.time()
with Pool(processes=4) as p:
p.map(f,range(10))
print(f'time1:{time.time()-start}')
start = time.time()
a = [f(x) for x in range(10)]
print(f'time2:{time.time()-start}')
結果
time1:0.1648421287536621
time2:6.29425048828125e-05
Python: Python3.7.0
OS: macOS High Sierra
プロセッサ: 2.3 GHz Intel Core i5
メモリ: 16 GB 2133 MHz LPDDR3
追記
PicoSushiさんのご回答で、オーバーヘッドが原因ということがわかりました。sleepでmultiprocessingの効果を確認できましたが、データを増やして見ると、やはりmultiprocessingの方が遅くなります。
大量な計算を行う時にmultiprocessingを使わないほうがいいでしょうか?それとも他の方法がありますか?
import time
from multiprocessing import Pool
def f(x):
return x*x
start = time.time()
with Pool(processes=4) as p:
p.map(f,range(10000000))
print(f'time1:{time.time()-start}')
start = time.time()
a = [f(x) for x in range(10000000)]
print(f'time2:{time.time()-start}')
結果
time1:2.1132028102874756
time2:1.4385631084442139