python多处理嵌套dictionay

时间:2017-10-16 11:03:44

标签: python dictionary multiprocessing

我尝试在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)

1 个答案:

答案 0 :(得分:0)

当你这样做时:

results[i] = ...

您没有向DictProxy results[i]添加值,而是将其替换为外部dict results内的另一个全新dict。因此,您需要同步的唯一一个是外部dict

将第15行替换为results = multiprocessing.Manager().dict(),并删除从未执行任何操作的循环第18-20行。