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

Python多进程中共享字典内嵌套字典的编辑策略有哪些?

多进程环境下修改共享字典中嵌套字典的解决技巧

问题原因

使用multiprocessing.Manager().dict()创建的共享字典,仅会追踪顶层键值对的修改操作。当你把普通Python字典赋值给共享字典的某个键后,这个嵌套字典属于非共享的普通对象——修改它的内部键值时,Manager的共享字典无法感知到变化,自然不会同步修改结果。

可行解决技巧

1. 重新赋值整个嵌套字典

修改嵌套字典后,将其重新赋值回共享字典的顶层键,触发Manager的同步机制:

import multiprocessing

def main():
    manager = multiprocessing.Manager()
    dictionary = manager.dict()

    dictionary["jim"] = {'x': 1, 'y': 2, 'z' : 3}
    print(dictionary['jim'])

    # 取出嵌套字典修改后,重新赋值回顶层键
    jim_dict = dictionary['jim']
    jim_dict['x'] += 1
    dictionary['jim'] = jim_dict

    print(dictionary['jim'])

if __name__ == '__main__':
    main()

这种方式简单直接,适合嵌套层级浅、修改频率低的场景。

2. 使用Manager创建嵌套共享字典

将嵌套的字典也换成Manager提供的dict,让所有层级的修改都能被进程间同步:

import multiprocessing

def main():
    manager = multiprocessing.Manager()
    dictionary = manager.dict()

    # 嵌套字典同样用manager.dict创建
    dictionary["jim"] = manager.dict({'x': 1, 'y': 2, 'z' : 3})
    print(dictionary['jim'])

    # 直接修改嵌套字典的键值即可同步
    dictionary['jim']['x'] += 1

    print(dictionary['jim'])

if __name__ == '__main__':
    main()

注意:如果有更深层级的嵌套,每一层都需要使用Manager提供的共享容器(如dict、list)。但这种方式会带来一定性能开销,因为每一次操作都需要经过Manager的进程通信。

3. 配合锁控制并发访问(多进程场景必备)

如果多个进程同时修改同一个嵌套字典,需要用共享锁保证操作的原子性,避免竞态条件:

import multiprocessing

def modify_jim_x(shared_dict, lock):
    with lock:
        jim_dict = shared_dict['jim']
        jim_dict['x'] += 1
        shared_dict['jim'] = jim_dict

def main():
    manager = multiprocessing.Manager()
    dictionary = manager.dict()
    lock = manager.Lock()  # 创建跨进程共享锁

    dictionary["jim"] = {'x': 1, 'y': 2, 'z' : 3}
    print(dictionary['jim'])

    # 启动两个进程并发修改
    p1 = multiprocessing.Process(target=modify_jim_x, args=(dictionary, lock))
    p2 = multiprocessing.Process(target=modify_jim_x, args=(dictionary, lock))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

    print(dictionary['jim'])

if __name__ == '__main__':
    main()

如果使用嵌套共享字典,同样可以通过锁来保障并发修改的安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:04:56