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>

可以看出,列表元素的地址可能因地而异,无法充当共享变量。如何解决这个问题?

ab类属性移到函数之外__init__

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

这样,ab将成为类变量,由所有testClass实例共享。

Python 中的类和实例变量

相关内容

  • 没有找到相关文章