7
votes

Python multiprocessing piscine - itération des méthodes d'objets?

Peut-être que quelqu'un plus couramment le code de la piscine multiprocessing de Python pourrait m'aider. J'essaie de vous connecter simultanément à plusieurs hôtes sur mon réseau (N à une heure) sur une connexion de socket et exécuter des RPC. Comme un hôte se termine, je souhaite ajouter l'hôte suivant dans la piscine à exécuter jusqu'à ce que tous soient terminés.

J'ai une classe, HClass, avec quelques méthodes pour le faire et une liste de noms d'hôte contenus dans l'hostlist. Mais je manque de grok aucun des exemples docs.python.org pour la piscine pour obtenir ce travail.

Un court extrait de code pour illustrer ce que j'ai jusqu'à présent: xxx

jusqu'à présent, je suis béni avec cette trace: xxx

où le processus est juste bloqué jusqu'à ce que je contrôle hors de celui-ci.


0 commentaires

3 Réponses :


1
votes

Je pense que c'est la même question avec peut 'T Pickle Lorsque vous utilisez la piscine multiprocessing de Python.map ()

copié des réponses dans le lien ci-dessus. Le problème est que le multitraitement doit piquer des choses pour les éliminer entre les processus et les méthodes liées ne sont pas piquables.

Une approche consiste à faire fonctionner une fonction sans bornes, comme la mettre hors de la classe. Ou faire cette fonction packable avec copy_reg


0 commentaires

6
votes

J'essaierais de garder une communication interprocessée au minimum. On dirait que tout ce que vous avez besoin d'envoyer est la chaîne d'hostname: xxx

par exemple, xxx


1 commentaires

Unutbu, tu as exactement raison. Je pense que j'essayais de sauter des étapes / que les choses plus simples (au moins dans ma tête) en ne faisant pas cette fonction (votre travailleur) en dehors de la classe. Merci!



1
votes

Je suis d'accord avec la solution de @ Unutbu ... Plus simple, c'est mieux. Toutefois, si vous devez envoyer la méthode de classe aller code>, j'utiliserais pathos.multiprorocesssing code>, au lieu de multiprocession code>.

>>> from pathos.multiprocessing import ProcessingPool as Pool
>>> p = Pool(4)
>>> class Test(object):
...   def plus(self, x, y): 
...     return x+y
... 
>>> t = Test()
>>> p.map(t.plus, x, y)
[4, 6, 8, 10]


0 commentaires