2016-12-08 7 views
0

Я создал класс, который будет генерировать несколько дочерних процессов, но не хочет, чтобы некоторые объекты родительского процесса копировались по нескольким дочерним процессам. Например, proc1 и proc2 в классе x ниже скопировали переменные родителя 'a' и 'b', когда они запущены (то есть proc1.start() и proc2.start()). Однако мне не нужно копировать «a», поскольку эти процессы не используют его. В моей программе есть много таких переменных, которые работают только в родительском процессе. Некоторые из них - очень большие словари или Pandas Dataframes. Есть ли способ предотвратить их копирование?Объект, принадлежащий родительскому объекту в многопроцессорности 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