1

Ich führe Multiprocessing, um meine Optimierungszeit für mehrere Perioden zu verkürzen.Python-Multiprocessing funktioniert nicht, während For-Schleife funktioniert

Bevor ich For-Schleife verwendete, die schnell ist, wenn meine Daten nicht groß sind.

Die Optimierungsfunktion gibt das optimierte Ergebnis an eine CSV-Datei aus.

Allerdings, wenn ich es zu

geändert
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.') 

alles hält nur am „Pool Closed“ ausgegeben und der Optimierer nie endet.

Gibt es ein Problem mit diesem Code?

Antwort

2

Sie schließen den Pool vor warten Sie besser machen es umgekehrt:

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

Dank Daniel. Ich habe versucht, die Methode und ein Fehler sagt: pool.join() Datei "D: \ Anaconda \ lib \ Multiprozessing \ pool.py", Linie 509, in assert self._state mitmachen (CLOSE, BEENDEN) AssertionError – Elaine

Verwandte Themen