0
from multiprocessing import Pool 
def f(arg): 
    if arg == 1: 
     raise Exception("exception") 
    return "hello %s" % arg 

p = Pool(4) 
res = p.map_async(f,(1,2,3,4)) 
p.close() 
p.join() 
res.get() 

Considérons cet exemple où je suis artificiel crée un pool de processus de 4 travailleurs et de répartir le travail en f(). Ma question était:Utilisation de multiprocessing.Pool avec la gestion des exceptions

Comment puis-je récupérer le travail réussi qui a été fait pour les arguments 2,3,4 (et en même temps faire la gestion des exceptions pour l'argument 1)?

Comme le code me donne juste:

Traceback (most recent call last): 
    File "process_test.py", line 13, in <module> 
    res.get() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 567, in get 
    raise self._value 
Exception: exception 

Répondre

1

Vous pouvez utiliser la fonction imap.

iterator = p.imap(f, (1,2,3,4,5)) 

while True: 
    try: 
     print next(iterator) 
    except StopIteration: 
     break 
    except Exception as error: 
     print error