la situation suivante:Identifier les éléments Renvoyé par différents processus
class A:
def __init__(self):
self.b_list = []
def add_element(b)
self.b_list.append(b)
class B:
def __init__(self,x):
self.x = x
class C:
def __init__(self,a,other_data):
self.a = a
def find_new_b(self):
....
def solve(c):
return c.find_new_b()
Chaque instance de class A
a une liste d'instances de class B
, qui sont ajoutés de façon incrémentale.
J'ai besoin d'itérer sur toutes les instances de class A
et de trouver pour chacun d'eux un nouvel élément de class B
.
J'utilise multiprocessing
pour faire
list_of_c_elements = [...]
pool = multiprocessing.Pool()
results = pool.map(solve, list_of_c_elements)
Le problème
Dans les résultats que j'ai une liste de résultats et je voudrais comprendre de quelle instance de class A
la nouvelle instance de class B
appartient. Chaque instance de class B
est générique et j'aimerais que les deux classes soient découplées.
solution envisagée
Changer solve()
à:
def solve(c):
return (c.a, c.find_new_b())
Je dois comparer tous les éléments de class A
je avec celui qui est retourné (très inefficace). Je ne peux pas faire quelque chose comme:
for output in results:
output[0].add_element(output[1])
depuis l'instance de class A
retournée est une autre instance.
Existe-t-il un moyen plus efficace d'atteindre mon objectif?
Pour la deuxième solution envisagée, que voulez-vous dire par là que vous ne pouvez pas l'utiliser "puisque l'objet de type A retourné est un autre objet"? – martineau
En une itération, je pourrais appeler plus d'une fois la résolution avec le même objet de type A et obtenir plus de 2 résultats pour le même objet. Ainsi, en utilisant la sortie [0] retournée et en produisant la sortie [0] .add_b_element (sortie [1]) pour chaque élément dans les résultats, on ajouterait 2 objets différents de type A. – newbie
Donc vous dites que le 'list_of_c_elements' peut avez des instances C en double? On dirait que cela - éviter d'ajouter un élément b deux fois - serait un problème, peu importe ce que vous faites. Notez que la classe 'A' n'a pas de méthode nommée' add_b_element() '. – martineau