multitraitement: carte vs map_async
Quelle est la différence entre l'utilisation de map
et map_async
? Ne sont-ils pas exécuter la même fonction après la distribution des items de la liste 4 processus?
Est-il donc faux de supposer les deux sont en cours d'exécution asynchrone et en parallèle?
def f(x):
return 2*x
p=Pool(4)
l=[1,2,3,4]
out1=p.map(f,l)
#vs
out2=p.map_async(f,l)
Ne pas
map
retour seulement une fois que le plan est fait (c'est à dire de façon synchrone, mais en parallèle), tandis que map_async
retourne immédiatement et permet la cartographie à faire dans l'arrière-plan (c'est à dire de manière asynchrone et en parallèle)?OriginalL'auteur aman | 2016-03-10
Vous devez vous connecter pour publier un commentaire.
Il y a quatre choix pour les tâches de cartographie des processus. Vous devez tenir compte de multi-args, de simultanéité, de blocage, et de la commande.
map
etmap_asnyc
ne diffèrent que par respect pour le blocage.map_async
est non-bloquante où, commemap
bloqueDonc, disons que vous avez eu une fonction
Exemple de sortie:
pool.map(f, range(10))
va attendre que tous les 10 appels de fonction pour terminer ce que nous voyons tous les tirages en ligne.r = pool.map_async(f, range(10))
va les exécuter de manière asynchrone et de bloquer uniquement lorsquer.wait()
est appelé ainsi, nous voyonsHERE
etMORE
entre maisDONE
sera toujours à la fin.Pas tout à fait. Vous remarquerez carte exécuter dans l'ordre, mais map_async n'est pas
Devrait-il y avoir un
print 'DONE'
aprèsr.wait()
?Oui, il y devrait être!
Si l'exemple ci-dessus n'est pas de retour des résultats différents pour
map
etmap_async
lors de la première exécution, essayez de définirrange(500)
ou de quelque chose de grand.OriginalL'auteur