【发布时间】:2015-09-09 13:08:16
【问题描述】:
我正在使用 multiprocessing.Pool 将方法的工作分配到多个处理器上。当我向字典添加内容时,执行该方法后它会丢失。这是为什么?以及如何规避它?
from multiprocessing import Pool
class Agent:
def __init__(self):
self.test_dict = {}
def apply(self, num):
# something very processor intensive here
self.test_dict[num] = num
print 'inside ', self.test_dict
def F(x):
agent, i = x
return agent.apply(i)
class SeriesInstance(object):
def __init__(self):
self.agent = Agent()
self.F = F
def run(self):
p = Pool()
for i in range(5):
out = p.map(F, [(self.agent, i),])
print 'outside', self.agent.test_dict
p.close()
p.join()
return out
if __name__ == '__main__':
SeriesInstance().run()
输出是这样,但是外面应该等于里面
inside {0: 0}
outside {}
inside {1: 1}
outside {}
inside {2: 2}
outside {}
inside {3: 3}
outside {}
inside {4: 4}
outside {}
【问题讨论】:
-
在你的真实代码中,哪一部分在做处理器密集型的工作?
-
没有真正的代码很长时间才能在这里发布,处理器密集型任务将在代理的应用功能中。
标签: python python-multiprocessing