Многопроцессорная обработка Python: как использовать разделяемую переменную для списка сложного класса?
При использовании многопроцессорной обработки в Python я надеюсь составить список классов в качестве общей переменной. Класс можно увидеть следующим образом (упрощенно):
class testClass():
def __init__(self):
self.a = []
self.b = []
Затем я использую многопроцессорную обработку списка 'testClass':
from multiprocessing import Process, Manager
def testProc(a_list):
for i in range(10):
a_list[1].a.append([1])
print('a_list[1] address: in processing', a_list[1])
if __name__ == '__main__':
manager = Manager()
testList = [testClass() for i in range(4)]
a_list = manager.list(testList)
print('a_list[1] address: initial ', a_list[1])
process_0 = Process(target=testProc, args=(a_list,))
process_0.start()
process_0.join()
print('a_list[1] address: final ', a_list[1])
Тогда результат:
a_list[1] address: initial <__main__.testClass object at 0x7f666c160f60>
a_list[1] address: in processing <__main__.testClass object at 0x7f666c16cf28>
a_list[1] address: in processing <__main__.testClass object at 0x7f666c16cf28>
a_list[1] address: final <__main__.testClass object at 0x7f666c160f98>
Можно видеть, что адрес элемента списка может варьироваться от места к месту, которые не могут выступать в качестве общей переменной. Как я могу решить эту проблему?
1 ответ
Переместить a
а также b
атрибуты класса за пределами __init__
функция
class testClass():
a = []
b = []
В этом случае, a
а также b
будут переменными класса, общими для всех testClass
экземпляров.