2017-02-21 2 views
1

J'apprends le calcul parallèle dans ipython. Je suis tombé sur un exemple,passer différents arguments pour les clients parallèles ipython

from ipyparallel import Client 

rc = Client() 
rc.block = True 
print(rc.ids) 

def mul(a,b): 
    return a*b 

dview = rc[:] 
print(dview.apply(mul, 5, 6)) 
print(rc[0].apply(mul, 5, 5)) 
print(rc[1].apply(mul, 5, 9)) 

Dans le code ci-dessus, lorsque dview.apply est appelé, il passe le même ensemble d'arguments pour tous les clients. J'ai appris à appeler chaque client séparément. Mais si les clients doivent effectuer des tâches exigeant beaucoup de données, existe-t-il un moyen de passer des arguments différents à travers dview.apply puisque c'est plutôt le point de faire un calcul parallèle.

S'il n'y a pas d'autre moyen, pouvons-nous rendre chaque appel client asynchrone, de sorte que les tâches seront effectuées parallèlement au lieu d'attendre les résultats du premier client lorsque des clients individuels sont appelés?

Répondre

1

En général, les calculs parallèles peuvent être exprimés en tant que cartes, où l'on passe des séquences d'arguments:

dview = rc[:] 
inputs = [6, 5, 9] 
results = dview.map(mul, [5] * len(inputs), inputs) 

pouvons-nous faire de chaque appel client asynchrone

oui, vous pouvez utiliser view.apply_async pour renvoyer un Avenir correspondant au résultat:

ar = view.apply_async(mul, 5, 6) 
result = ar.get()