我尝试在python(3.4.2)中使用多处理工具来加快我的性能。我的正常程序运行正常,但我必须处理一个大的嵌套字典。附上简化版,显示我的问题。如果我直接使用TestProc它正在工作,而不是多处理。
感谢您的帮助!
import multiprocessing
def TestProc(liste, results):
for i in liste:
results[i] = {'power':{'square': float(i)**2, 'cubic':
float(i)**3},'root':{'square': float(i)**(1/2), 'cubic': float(i)**(1/3)}}
if __name__ == "__main__":
multiprocessing.freeze_support()
results = multiprocessing.Manager().dict()
results = {}
liste = ['1','2','3','4','5']
for i in liste:
results[i] = multiprocessing.Manager().dict()
print(results)
#TestProc(liste, results)
p1 = multiprocessing.Process(target=TestProc, args=(liste,results,))
p1.start()
p1.join()
print(results)
答案 0 :(得分:0)
当你这样做时:
results[i] = ...
您没有向DictProxy
results[i]
添加值,而是将其替换为外部dict
results
内的另一个全新dict
。因此,您需要同步的唯一一个是外部dict
。
将第15行替换为results = multiprocessing.Manager().dict()
,并删除从未执行任何操作的循环第18-20行。