Est-il un simple processus parallèle de la carte pour python?
Je suis à la recherche d'un simple processus parallèle de la carte pour python, c'est une fonction
parmap(function,[data])
pour exécuter la fonction sur chaque élément de [données] sur un processus différent (bien, sur une autre base, mais autant que je sache, la seule façon d'exécuter des trucs sur les différents cœurs en python est de démarrer plusieurs interprètes), et renvoie une liste de résultats.
Fait quelque chose comme ça existent? Je voudrais quelque chose de simple, donc un module simple, ce serait bien. Bien sûr, si une telle chose existe, je me contenterai d'une grande bibliothèque :-/
Vous devez vous connecter pour publier un commentaire.
Je semble correspondre à ce que vous avez besoin est la carte de la méthode dans le traitement multiple.Piscine():
Par exemple, si vous voulez la carte cette fonction:
de gamme(10), vous pouvez le faire en utilisant la carte intégrée() fonction:
ou à l'aide d'un traitement multiple.Piscine() de l'objet de la méthode map():
pool.close
(idéalement dans lefinally
bloc de enfermanttry/finally
). Sinon, la piscine peut ne pas nettoyer les processus enfants et vous pouvez vous retrouver avec de zombie processus. Voir bugs.python.org/issue19675with
?with
de sorte que doit gérer le nettoyage du bien.PicklingError: Can't pickle <function <lambda> at 0x121572bf8>: attribute lookup <lambda> on __main__ failed
comment se fait-il ne peut pas travaillerlambda
?Je sais que c'est un vieux post, mais juste au cas où, j'ai écrit un outil pour faire de ce super, super facile a appelé parmapper (j'appelle ça parmap dans mon utilisation, mais le nom a été pris).
Il traite beaucoup de la configuration et de la déconstruction des processus et ajoute des tonnes de fonctionnalités. Dans le mauvais ordre d'importance
Il ne encourir un coût faible, mais pour la plupart des utilisations, c'est négligeable.
J'espère que vous le trouverez utile.
(Note: C', comme
map
en Python 3+, renvoie un objet iterable donc, si vous vous attendez à tous les résultats pour la franchir immédiatement, utilisezlist()
)Pour ceux qui recherchent Python équivalent de R mclapply(), voici ma mise en œuvre. C'est une amélioration de la deux exemples suivants:
Valero.
Il peut s'appliquer à la carte des fonctions avec un seul ou plusieurs arguments.
Cela peut se faire en toute élégance avec Ray, un système qui vous permet de paralléliser et distribuer votre code Python.
Pour paralléliser votre exemple, vous devez définir votre fonction map avec le
@ray.remote
décorateur, puis d'appeler avec.remote
. Cela permettra d'assurer que chaque instance de la télécommande la fonction sera exécutée dans un processus différent.Ce sera d'impression:
et ça va se terminer dans environ
len(list)/p
(arrondi à l'entier le plus proche) oùp
est le nombre de noyaux sur votre machine. En supposant une machine avec 2 cœurs, notre exemple exécuter dans5/2
arrondi, j'.e, dans environ3
sec.Il y a un certain nombre d'avantages de l'utilisation de Rayons sur la multitraitement module. En particulier, la même code sera exécuté sur une seule machine ainsi que sur un cluster de machines. Pour plus d'avantages de Ray voir ce poste.