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

Python中multiprocessing.Manager.dict()多进程并发访问修改是否安全?

关于multiprocessing.Manager字典的多进程并发一致性问题

multiprocessing.Manager()创建的dict是进程安全的,Python的multiprocessing模块已经为它处理了基础的并发控制,普通的读写、单步修改操作不会出现数据一致性问题。

原因说明

这种字典本质是跨进程的代理对象,所有操作都会通过进程间通信(IPC)转发到Manager进程统一处理,每个单步操作(比如result_dict[k] = v、del result_dict[k]、result_dict.get(k))都是原子性的,不会被其他进程的操作打断。

注意:复合操作仍存在竞态风险

如果是多步复合操作,比如先读取值再修改后写回,就可能出现竞态条件。举个例子:

# 非原子的复合操作
result_dict['counter'] = result_dict['counter'] + 1

这行代码拆分为「读取counter值→加1→写回新值」三个步骤,这三个步骤整体不是原子的。多个进程同时执行时,可能会有多个进程读到同一个初始值,最终导致实际累加结果小于预期。

解决复合操作的竞态问题

针对这种场景,需要额外使用Manager提供的Lock来确保复合操作的原子性:

from multiprocessing import Process, Manager, Lock

def update_counter(shared_dict, lock):
    with lock:
        shared_dict['counter'] = shared_dict['counter'] + 1

if __name__ == '__main__':
    manager = Manager()
    result_dict = manager.dict({'counter': 0})
    lock = manager.Lock()
    
    procs = [Process(target=update_counter, args=(result_dict, lock)) for _ in range(10)]
    for p in procs:
        p.start()
    for p in procs:
        p.join()
    
    print(result_dict['counter'])  # 输出10,结果符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:24:52