1

マルチプロセッシングを実行して、最適化時間を複数に短縮しています。forループの動作中にPythonマルチプロセッシングが動作しない

私がループの前に使用していた前は、データが大きくないときに高速です。

for date in DatesOpt: 
    x = X.loc[X['Date'] == np.int(date)].drop('Date',1) 
    f = F.loc[F['Date'] == np.int(date)].drop('Date',1) 
    d = D.loc[D['Date'] == np.int(date)].drop('Date',1) 
    r = R.loc[R['Date'] == np.int(date)].drop('Date',1) 
    optimize(date,x,f,d,r) 

最適化機能は、最適化された結果をcsvファイルに出力します。私は

にそれを変更したときに

しかし、

if __name__=='__main__': 
    pool = mp.Pool(mp.cpu_count()-1) 
    for date in DatesOpt: 
    x = X.loc[X['Date'] == np.int(date)].drop('Date',1) 
    f = F.loc[F['Date'] == np.int(date)].drop('Date',1) 
    d = D.loc[D['Date'] == np.int(date)].drop('Date',1) 
    r = R.loc[R['Date'] == np.int(date)].drop('Date',1) 
    pool.apply_async(optimize,args=(date,x,f,d,r,)) 
    print('Waiting for all subprocesses done') 
    pool.close() 
    print('Pool Closed') 
    pool.join() 
    print('All subprocess done.') 

すべてがちょうど「プールのクローズ」出力で停止し、オプティマイザは決して終わりません。

このコードに問題はありますか?あなたが待っているの前にプールを閉じている

答えて

2

、あなたはより良いそれが逆転します:

if __name__=='__main__': 
    pool = mp.Pool(mp.cpu_count()-1) 
    for date in DatesOpt: 
    x = X.loc[X['Date'] == np.int(date)].drop('Date',1) 
    f = F.loc[F['Date'] == np.int(date)].drop('Date',1) 
    d = D.loc[D['Date'] == np.int(date)].drop('Date',1) 
    r = R.loc[R['Date'] == np.int(date)].drop('Date',1) 
    pool.apply_async(optimize,args=(date,x,f,d,r,)) 
    print('Waiting for all subprocesses done') 
    pool.join() 
    pool.close() 
    print('Pool Closed') 
    print('All subprocess done.') 
+0

おかげでダニエルを。私はこの方法を試してみましたが、エラーは言う:pool.join() ファイル "D:\アナコンダの\ libが\マルチプロセッシングの\ pool.py" で、ライン509、中 アサートself._stateに参加(CLOSE、TERMINATE) AssertionError – Elaine

関連する問題