Python: multitraitement.carte: Si un processus soulève une exception, pourquoi ne sont pas les autres processus " enfin des blocs?

Ma compréhension est que, finalement, les clauses doit *toujours* être exécuté si l'essai a été saisi.

import random

from multiprocessing import Pool
from time import sleep

def Process(x):
  try:
    print x
    sleep(random.random())
    raise Exception('Exception: ' + x)
  finally:
    print 'Finally: ' + x

Pool(3).map(Process, ['1','2','3'])

Résultat attendu est que pour chaque x qui est imprimé sur son propre par la ligne 8, il y doit être une occurrence de "Enfin x'.

Exemple de sortie:

$ python bug.py 
1
2
3
Finally: 2
Traceback (most recent call last):
  File "bug.py", line 14, in <module>
    Pool(3).map(Process, ['1','2','3'])
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 225, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 522, in get
    raise self._value
Exception: Exception: 2

Il semble qu'une exception de terminaison d'un processus se termine, les parents et les frères et soeurs processus, même si il y a encore du travail nécessaire à faire dans d'autres processus.

Pourquoi ai-je tort? Pourquoi est-ce correct? Si cela est correct, comment devrait un en toute sécurité nettoyer les ressources en multi process Python?