Python 如何通过多处理访问共享词典?

Python 如何通过多处理访问共享词典?,python,Python,我认为我正确地遵循了python文档,但是我很难得到我想要的结果。我基本上有一个数字列表,它被传递给嵌套for循环的函数,输出保存在字典中 代码如下: from multiprocessing import Pool, Manager list = [1,2,3,10] dictionary = {} def test(x, dictionary): for xx in range(100): for xxx in range(100): dic

我认为我正确地遵循了python文档,但是我很难得到我想要的结果。我基本上有一个数字列表,它被传递给嵌套for循环的函数,输出保存在字典中

代码如下:

from multiprocessing import Pool, Manager

list = [1,2,3,10]
dictionary = {}
def test(x, dictionary):
    for xx in range(100):
        for xxx in range(100):
            dictionary[x]=xx*xxx



if __name__ == '__main__':
    pool = Pool(processes=4)
    mgr = Manager()
    d = mgr.dict()
    for N in list:
        pool.apply_async(test, (N, d))

    # Mark pool as closed -- no more tasks can be added.
    pool.close()

    # Wait for tasks to exit
    pool.join()

    # Output results
    print d
以下是预期结果:

{1: 9801, 2: 9801, 3: 9801, 10: 9801}

有没有关于我做错了什么的建议?此外,我还没有说服自己共享资源是最好的方法(考虑使用数据库来维护状态),因此如果我的方法完全有缺陷,或者python中有更好的方法来实现这一点,请告诉我。

测试的定义更改为:

def test(x, d):
    for xx in range(100):
        for xxx in range(100):
            d[x]=xx*xxx
否则,您只需增加一些全局
字典(没有同步),以后再也无法访问它



至于一般的方法,我认为这一方法在共享字典上尤其有很多争议。您真的必须在每个流程中尽快更新它吗?在每个过程中累积成批的部分结果,并偶尔更新一次共享对象,应该会表现得更好。

谢谢,我不敢相信我犯了这么简单的错误。谢谢至于一般做法。我真正的代码基本上需要引用现有的dict项,如果它不存在,则创建它(如果它确实存在,则在新循环中处理它)。批处理对我来说并不特别有效,但了解这种方法很好。我想建立一个数据库(或将结果存储在文件中),但不确定。