Gestern fragte ich eine Frage: Reading data in parallel with multiprocessein Wörterbuch parallel Multiprozessing
Ich habe sehr gute Antworten, und ich implementiert die Lösung in der Antwort erwähnt i markiert als korrekt.
def read_energies(motif):
os.chdir("blabla/working_directory")
complx_ener = pd.DataFrame()
# complex function to fill that dataframe
lig_ener = pd.DataFrame()
# complex function to fill that dataframe
return motif, complx_ener, lig_ener
COMPLEX_ENERGIS = {}
LIGAND_ENERGIES = {}
p = multiprocessing.Pool(processes=CPU)
for x in p.imap_unordered(read_energies, peptide_kd.keys()):
COMPLEX_ENERGIS[x[0]] = x[1]
LIGAND_ENERGIES[x[0]] = x[2]
jedoch nimmt diese Lösung die gleiche Menge an Zeit, als ob ich gerade über laufen würde peptide_kd.keys()
und füllen Sie das DataFrames
eins nach dem anderen. Warum ist das so? Gibt es eine Möglichkeit, die gewünschten Diktate parallel zu füllen und tatsächlich eine Geschwindigkeitssteigerung zu erreichen? Ich betreibe es auf einem 48-Core-HPC.
Es kann sein, dass der Overhead der Verwendung von Multiprocessing größer als der der komplexen Funktionsverarbeitung ist. Vielleicht, wenn 'read_energies()' jedes Mal ein Datenfeld mit einer variablen Anzahl verarbeiten würde, würde es Ihnen ermöglichen, die Dinge auf den Punkt abzustimmen, wo es vorteilhaft wurde. – martineau