Ich benutze Multiprocessing in Python mit dem pool.apply_async
, um gleichzeitig eine Funktion mit verschiedenen Argumenten auszuführen.Ändern Sie die Art und Weise, in der Pythons Multiprocessing Fehler verursacht
Der relevante Auszug des Codes ist:
import multiprocessing as mp
all_details_to_process_full = [[x,y.z], [x2,y2.z2]]
def loop_over_desired_sub(arg_list):
...
if __name__ == '__main__':
pool = mp.Pool(processes=10)
desired_content = [pool.apply_async(loop_over_desired_sub, args=(arg_list,)) for arg_list in all_details_to_process_full]
results = [p.get() for p in desired_content]
Soweit ich das beurteilen kann, für Python des Standardverhalten nur den Code zu stoppen, wenn ein Fehler durch die früheste subprocess angehoben wird, die initialisiert wurde.
Wenn beispielsweise 10 Elemente in der Liste mit separaten Unterprozessen verarbeitet werden und ein Fehler bei der Verarbeitung des ersten Elements auftritt (dh des ersten untergeordneten Prozesses), wird Python sofort den Fehler auslösen und den Fehler beheben Code. Wenn jedoch ein Fehler in dem zweiten Unterprozess auftritt, während dieser Unterprozess stoppt, wird der Rest des Codes fortgesetzt, bis der erste Eintrag beendet ist, zu welchem Zeitpunkt der Fehler ausgelöst wird und der Code stoppt. [Wenn ein Fehler beim Verarbeiten des dritten Elements auftritt, müssen beide Elemente eins und zwei beendet werden, bevor der Fehler ausgelöst wird].
Gibt es eine Möglichkeit, dieses Verhalten zu ändern, sowohl für:
Jeder Fehler ausgelöst, das heißt in einem der Teilprozess, um den Code zu stoppen sofort
Der Code nicht zu stoppen wenn es wird ein Fehler ausgelöst, bis alle subprocessed haben
fertig