Quelle est la différence entre map et map_async dans la bibliothèque multitraitement en Python?                    https://docs.python.org/2/library/multiprocessing.html


Réponse 1:

TLDR; map () se bloque jusqu'à la fin, map_async () renvoie immédiatement et planifie un rappel à exécuter sur le résultat.

Ils appellent tous les deux la même méthode privée _map_async ().

La différence est que map_async passe un rappel et error_callback à exécuter, qui sera exécuté lorsque le mappage est terminé (ou échoue!). Il reviendra immédiatement!

De la classe Pool dans le module multiprocessing:

def map_async (self, func, iterable, chunksize = None,
              callback = None, error_callback = None):
    '' '
    Version asynchrone de la méthode `map ()`.
    '' '
    return self._map_async (func, itérable, mapstar,
                           chunksize, callback, error_callback)

map () appelle get () sur la valeur de retour de _map_async, qui se bloquera jusqu'à la fin de l'exécution de map_async.

carte def (self, func, itérable, chunksize = None):
 '' '
 Appliquer `func` à chaque élément de` iterable`, en collectant les résultats
 dans une liste qui est retournée.
 '' '
    return self._map_async (func, itérable, mapstar,
                           chunksize) .get ()

Réponse 2:

2. Fonctions intégrées - carte

Une fonction qui prend une fonction et un itérable. La fonction est appliquée à chaque élément de l'itérable et la liste des résultats de chaque appel est renvoyée sous forme de liste de tuples.

16.6. multitraitement - carte

Identique à la carte Python normale, mais exécute la carte en parallèle sur plusieurs processus. L'appel de carte attendra que tous les processus soient terminés, puis retourne une liste de tuples, tout comme la fonction de carte normale.

16.6. multitraitement - map_async

Semblable aux fonctions de carte ci-dessus en ce qu'il prend une fonction et un itérable, mais il retourne immédiatement un AsyncResult avant la fin du traitement, pas une liste de tuples. Cela permet à d'autres traitements de continuer pendant le traitement de la carte.

16.6. multitraitement - AsyncResult

AsyncResult peut être vérifié périodiquement pour voir si le traitement est terminé. Une fois que AsyncResult est prêt et réussi, la méthode get renvoie la liste des tuples comme la fonction de carte native.