arr
- это list
, который не будет использоваться всеми экземплярами подпроцесса.
Для этого вам нужно использовать объект Manager
для создания управляемого списка, который знает о том, чтоон разделяется между процессами.
Ключ:
self.arr = multiprocessing.Manager().list()
полный рабочий пример:
import multiprocessing
class MyClass(object):
def __init__(self):
self.arr = multiprocessing.Manager().list()
def helper_function(self, n):
self.arr.append(n)
def main_function(self):
jobs = []
for i in range(0,10):
p = multiprocessing.Process(target=self.helper_function, args=(i,))
jobs.append(p)
p.start()
for job in jobs:
job.join()
print(self.arr)
if __name__ == "__main__":
a = MyClass()
a.main_function()
этот код теперь печатается: [7, 9, 2, 8, 6, 0, 4, 3, 1, 5]