0
だからこれは私のコードPythonのマルチプロセッシングは、通常の実装よりも遅くなり
def get_h(tmp):
tmp =[map(float,line.split()[3:6]) for line in tmp[:768]]
return hbond(tmp,side)
def get_sc(tmp):
return popvar(tmp)
def calculate():
hframe=[]
pl=Pool()
s=time()
with open(file) as f:
for _ in xrange(100):
tmp=list(islice(f,9,9+atoms))
if not tmp: break
hframe.append(pl.apply_async(get_h,[tmp]))
hframe=[i.get() for i in hframe]
print time()-s #takes ~ 1 sec
s=time()
ll=[pl.apply_async(get_sc,[tmp]) for tmp in izip(*hframe)]
ll=[i.get() for i in ll]
print time()-s #takes ~23 sec !!!
s=time()
ll=[get_sc(tmp) for tmp in izip(*hframe)]
print time()-s #takes ~ 1 sec
calculate
は、ここでの主な機能です。それは2つのことを行います。 1stはブロックに分割されたファイルを読み込み、2ndはFortranプログラムから作成された別の関数を呼び出し、それ以降の計算を行います。ファイルからデータブロックを読み出すために、Pythonマルチプロセッシングpool
を使用しました。しかし、計算部分にpool
を使用すると、通常の実装よりも遅く(ほぼ23倍)なります。ここで何が起きているのですか?どうすれば修正できますか?