问题在于,当将对象传递给工作进程时,它们会被泡菜包装,运送到另一个过程中,然后在其中解压缩并进行处理。您的对象没有像克隆的那样传递给其他过程。您不返回对象,因此克隆的对象被愉快地修改,然后被丢弃。
看起来这是无法完成的(Python:可以在两个单独的进程之间共享内存中的数据)。
您可以做的就是返回修改后的对象。
import numpy as npimport multiprocessing as mpclass Tester: num = 0.0 name = 'none' def __init__(self,tnum=num, tname=name): self.num = tnum self.name = tname def __str__(self): return '%f %s' % (self.num, self.name)def mod(test, nn, out_queue): print test.num test.num = np.random.randn() print test.num test.name = nn out_queue.put(test)if __name__ == '__main__':num = 10 out_queue = mp.Queue() tests = np.empty(num, dtype=object) for it in range(num): tests[it] = Tester(tnum=it*1.0) print 'n' workers = [ mp.Process(target=mod, args=(test, 'some', out_queue) ) for test in tests ] for work in workers: work.start() for work in workers: work.join() res_lst = [] for j in range(len(workers)): res_lst.append(out_queue.get()) for test in res_lst: print test
这的确引起了一个有趣的观察,因为产生的过程是相同的,所以对于随机数它们都以相同的种子开始,因此它们 都 产生相同的“随机”数。



