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

Python multiprocessing多进程场景下共享列表未被修改问题求解

错误原因

  • 共享列表对象被意外覆盖
    你调用manager.list()生成的是支持跨进程同步的代理对象,但后续执行shared_list = input_list[:]时,直接把shared_list变量指向了普通的Python列表对象。普通列表存在于各进程独立的内存空间中,子进程对普通列表的修改只会作用于当前进程的副本,不会同步回主进程。
  • 不推荐用global传递共享对象
    多进程启动时会拷贝父进程的内存空间,global修饰的变量在子进程中是独立副本,只有manager创建的代理对象本身具备跨进程同步能力,最优实践是将共享对象直接作为参数传递给子进程任务。

修正后的代码

from multiprocessing import Process, Manager

input_list = ["A", "B", "C", "D", "E", "F"]
  
manager = Manager()
# 初始化共享列表时直接传入input_list,保留代理对象引用
shared_list = manager.list(input_list)

def do_stuff(element, i, shared_list):
    shared_list[i] = element[i] * 2
    print(shared_list[i])

processes = []
for i in range(len(input_list)):
    # 把共享列表作为参数传入子进程
    p = Process(target=do_stuff, args=(input_list, i, shared_list))
    p.start()
    processes.append(p)

for p in processes:
    p.join()

# 转成普通列表打印更直观
print(list(shared_list))

执行效果

运行修正后代码最终输出为:
['AA', 'BB', 'CC', 'DD', 'EE', 'FF'],符合预期修改结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 15:42:00