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

Python进程中获取multiprocessing Array及引用initargs访问gs变量的方法

嘿,我来帮你搞定这两个Python多进程的问题,结合实际场景给你示例和说明:

问题1:如何在Python进程中获取multiprocessing Array

multiprocessing.Array是基于共享内存的数组,能让多个进程直接读写同一块内存空间,获取它主要有两种常用方式:

方式1:直接作为参数传给子进程

你可以在创建Process对象时,把Array作为参数传给目标函数,子进程就能直接操作它了:

from multiprocessing import Process, Array

def worker(shared_arr):
    # 子进程修改共享数组
    shared_arr[1] = 2024
    # 读取数组内容
    print(f"子进程读取到的数组: {shared_arr[:]}")

if __name__ == '__main__':
    # 创建int类型的共享数组,初始值[0, 0, 0]
    my_arr = Array('i', [0, 0, 0])
    # 启动子进程,把共享数组传进去
    p = Process(target=worker, args=(my_arr,))
    p.start()
    p.join()
    # 主进程查看修改后的结果
    print(f"主进程读取到的数组: {my_arr[:]}")

运行后你会发现,子进程对数组的修改,主进程也能看到,这就是共享内存的作用。

方式2:通过初始化函数全局注入(和问题2联动)

如果是用进程池(Pool),可以结合初始化函数把Array注入到每个子进程的全局变量里,这部分刚好对应你的第二个问题。

问题2:在每个进程中访问"gs"变量,如何引用initargs

要让每个子进程都能访问gs变量,核心是用Pool(或者Process)的initializer和initargs参数:initializer是每个子进程启动时会执行的初始化函数,initargs就是传给这个初始化函数的参数,我们可以通过它把需要共享的变量赋值给子进程的全局gs。

举个完整的例子:

from multiprocessing import Pool, Array

# 定义全局变量gs,子进程会通过初始化函数赋值
gs = None

def init_subprocess(shared_data):
    # 把传入的共享数据赋值给全局变量gs,每个子进程都会执行这一步
    global gs
    gs = shared_data

def process_task(task_id):
    # 直接访问全局变量gs,操作共享数组
    gs[task_id] = task_id * 10
    print(f"任务{task_id}修改后的gs: {gs[:]}")

if __name__ == '__main__':
    # 创建共享数组作为要共享的gs数据
    shared_arr = Array('i', [0, 0, 0, 0])
    # 创建进程池,指定初始化函数和对应的参数(initargs是元组类型)
    with Pool(initializer=init_subprocess, initargs=(shared_arr,)) as pool:
        # 给每个子进程分配任务
        pool.map(process_task, range(4))
    # 主进程查看最终的共享数组状态
    print(f"主进程最终结果: {shared_arr[:]}")

注意要点:

  • 如果gs是普通的非共享对象(比如普通列表),那每个子进程的gs都是独立副本,修改不会影响其他进程;如果需要进程间共享修改,一定要用multiprocessing提供的共享对象(Array、Value、Manager等)。
  • Windows系统下必须把主逻辑放在if __name__ == '__main__':里面,不然会触发进程创建的递归问题。
  • initargs必须是元组类型,哪怕只有一个参数,也要写成(shared_arr,)这样的形式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:08:02