2016-12-08 4 views
0

複数の子プロセスを生成するクラスを作成しましたが、親プロセスのオブジェクトの一部を複数の子プロセスにコピーしたくありません。たとえば、以下のクラスxのproc1とproc2は、親の変数 'a'と 'b'が開始されたとき(つまりproc1.start()とproc2.start())をコピーしました。しかし、これらのプロセスでは使用されないため、「a」はコピーしたくありません。私のプログラムでは、親プロセスでのみ動作する変数がたくさんあります。それらの一部は非常に大きな辞書またはパンダのデータフレームです。コピーされないようにする方法はありますか?Pythonマルチプロセッシングでの親の所有オブジェクト

class x: 
    def __init__(self): 
     self.b = 20 
     self.a = 10 
     proc1 = mp.Process(target=self.func1) 
     proc2 = mp.Process(target=self.func2) 
     proc1.start() 
     proc2.start() 
     # Main process is doing something here 
     proc1.join() 
     proc2.join() 

    def func1(self): 
     time.sleep(10) 
     print("Process 1:",self.b) 

    def func2(self): 
     self.b = 15 
     print("Process 2:",self.b) 

if __name__ == '__main__': 
    y = x() 

答えて

0

関数をクラスから取り出して、単純に変数を渡してみましたか?

def func1(b): 
    time.sleep(10) 
    print("Process 1:", b) 

def func2(b): 
    b = 15 
    print("Process 2:", b) 

class x: 
    def __init__(self): 
     self.b = 20 
     self.a = 10 
     proc1 = mp.Process(target=func1(self.b)) 
     proc2 = mp.Process(target=func2(self.b)) 
     proc1.start() 
     proc2.start() 
     # Main process is doing something here 
     proc1.join() 
     proc2.join() 

if __name__ == '__main__': 
    y = x() 

出力:

Process 2: 15 
Process 1: 20 
関連する問題