Многопроцессорная обработка Python: как использовать разделяемую переменную для списка сложного класса? - PullRequest
0 голосов
/ 29 июня 2018

При использовании многопроцессорной обработки в 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 Ответ

0 голосов
/ 29 июня 2018

Перемещение атрибутов класса a и b за пределы __init__ function

class testClass(): a = [] b = []

Таким образом, a и b будут переменными класса, общими для всех экземпляров testClass.

Переменные класса и экземпляра в Python

...