You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python multiprocessing无法正常创建嵌套字典结构问题咨询

问题原因

  • multiprocessing.Manager()创建的托管字典manager.dict(),仅能自动同步第一层键值的修改操作。你给第一层赋值dic[user] = {}的时候,这个空字典是普通Python字典,不属于托管对象,后续你修改这个普通嵌套字典dic[user][i] = xxx的时候,托管字典感知不到内部的修改,自然不会同步到主进程,所以主进程看到的永远是最开始赋值的空字典。

解决方案

方案1:嵌套层也使用托管字典

把内层的子字典也换成manager.dict()创建的托管对象即可,修改后代码如下:

import multiprocessing
import random

users = [1, 2, 3, 4, 5, 6, 7, 8, 9, 100]
users2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 100]


def random_number_check(user, dic, list2, manager):
    # 内层也用manager创建托管字典
    dic[user] = manager.dict()
    print(list2)
    for i in list2:
        dic[user][i] = random.randint(0, 1000)
        print(dic[user][i])


if __name__ == '__main__':
    manager = multiprocessing.Manager()
    return_dict = manager.dict()
    jobs = []
    for i in range(10):
        p = multiprocessing.Process(target=random_number_check, args=(users[i], return_dict, users2, manager))
        jobs.append(p)
        p.start()

    for proc in jobs:
        proc.join()
    # 最后转成普通字典方便查看
    print({k: dict(v) for k, v in return_dict.items()})

方案2:修改后主动触发同步

如果不想用嵌套托管字典,也可以先在子进程本地把整个子字典构造完成,再一次性赋值给第一层的key,这样托管字典能感知到第一层的赋值操作,自动同步:

import multiprocessing
import random

users = [1, 2, 3, 4, 5, 6, 7, 8, 9, 100]
users2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 100]


def random_number_check(user, dic, list2):
    # 先在本地构造完整的子字典
    sub_dic = {}
    print(list2)
    for i in list2:
        sub_dic[i] = random.randint(0, 1000)
        print(sub_dic[i])
    # 一次性赋值给第一层key,触发同步
    dic[user] = sub_dic


if __name__ == '__main__':
    manager = multiprocessing.Manager()
    return_dict = manager.dict()
    jobs = []
    for i in range(10):
        p = multiprocessing.Process(target=random_number_check, args=(users[i], return_dict, users2))
        jobs.append(p)
        p.start()

    for proc in jobs:
        proc.join()

    print(return_dict)

内容的提问来源于stack exchange,提问作者Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:09:03