2017-10-05 4 views
0

を返される要素は、以下の状況を考える:識別異なるプロセスによって

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() 

class Aの各インスタンスは、増分方法で添加されるclass Bのインスタンスのリストを持っています。

私はclass Aのすべてのインスタンスを繰り返し処理し、それぞれに新しい要素class Bを見つける必要があります。私は結果で

list_of_c_elements = [...] 
pool = multiprocessing.Pool() 
results = pool.map(solve, list_of_c_elements) 

問題

が、私は結果のリストを持っていると私はclass Aの新しいインスタンスのどのインスタンスの理解したいことやってmultiprocessingを使用してい

class Bが所属しています。 class Bの各インスタンスは一般的なものです。この2つのクラスを分離した状態に保ちたいと思います。

を解決

変更solve()を考慮:

def solve(c): 
    return (c.a, c.find_new_b()) 

私は私は1つは、(非常に非効率的な)戻ってきたとclass Aのすべての要素を比較する必要があります。返さclass Aのインスタンスが別のインスタンスであるため、

for output in results: 
    output[0].add_element(output[1]) 

: 私のような何かを行うことはできません。

私の目標を達成するためのより効率的な方法はありますか?

+0

2つ目の解決策では、「返されたタイプAのオブジェクトが別のオブジェクトであるため」とはどういう意味ですか? – martineau

+0

1回の繰り返しで、タイプAの同じオブジェクトを使用して2回以上解決を呼び出すことができ、同じオブジェクトに対して2つ以上の結果を得ることができます。したがって、返されたoutput [0]とoutput [0] .add_b_element(output [1])を使用して結果の各要素が2つの異なるオブジェクトAに追加されます。 – newbie

+0

したがって、 'list_of_c_elements'その中に 'C'インスタンスが重複していますか?あなたが何をしていても、b要素を2回追加するのを避けるようなことが問題になるでしょう。クラス 'A'には' add_b_element() 'というメソッドはありません。 – martineau

答えて

1

Cは、メンバーにさらにid(a)を保持でき、必要に応じてインデックス辞書{id(a): a}を生成できます。使用可能な結果を​​得るためには、もちろんすべての呼び出しがメインプロセスで行われなければならないことに注意してください。

関連する問題