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

如何实现Python多进程间列表修改的共享同步?

Python多进程共享列表修改的解决方案

问题根源

Python多进程中,每个子进程会复制父进程的内存空间,你定义的listx在one和two进程里是完全独立的副本。two修改的是自己进程内的副本,one读取的是自己进程内的副本,自然感知不到对方的修改。

核心解决方法:使用multiprocessing.Manager

multiprocessing.Manager会启动一个独立的管理进程,负责维护共享对象,其他子进程通过代理访问该对象,实现真正的跨进程数据共享。

修改后的可运行代码:

import multiprocessing
import time  # 原代码遗漏time模块,需补充

def one(listx):
    time.sleep(5)
    if 'ok' not in listx:
        print('not in')
    else:
        print('in')

def two(listx):
    listx.append('ok')

if __name__ == '__main__':
    with multiprocessing.Manager() as manager:
        # 创建跨进程共享的列表对象
        listx = manager.list()
        # 将共享列表作为参数传递给子进程
        p1 = multiprocessing.Process(target=one, args=(listx,))
        p2 = multiprocessing.Process(target=two, args=(listx,))
        p1.start()
        p2.start()
        # 等待进程执行完毕,确保输出能正常显示
        p1.join()
        p2.join()

运行后会输出in,说明进程间的列表修改已被正确感知。

其他可选方案

  • multiprocessing.Array:适合固定长度的基本类型数组(如整数、字符),但用法比Manager.list更繁琐,适合对性能要求较高的场景。
  • multiprocessing.Queue:如果只是需要进程间传递数据而非直接共享列表,队列是更安全的选择,天然支持生产者-消费者模式,无需手动处理同步问题。

注意:不要依赖全局变量实现进程间共享,子进程的全局变量是父进程的副本,无法实现数据同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:50:21