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

多进程场景下如何跨Python脚本共享全局变量供多个进程函数使用

Python多进程跨脚本共享变量解决方案

核心问题说明

Python 多进程拥有独立的内存地址空间,你当前使用global声明的全局变量仅在当前进程内生效,子进程启动时会复制父进程的内存快照,后续各个进程对变量的修改完全隔离,无法跨进程、跨脚本同步。

具体修改方案

我们使用multiprocessing.Manager提供的共享对象实现跨进程变量共享,该方案兼容所有数据类型,跨脚本也可正常传递使用。

修改script1.py代码

import multiprocessing
from script2 import function3

def function1(shared_x):
    while True:
        input_val = input()
        # 若需要数值运算,将输入转为对应类型,此处以整型为例
        try:
            shared_x.value = int(input_val)
        except ValueError:
            print("请输入合法数字")

def function2(shared_x):
    while True:
        print(shared_x.value)

# 多进程启动逻辑必须被if __name__ == "__main__"包裹,否则Windows系统会报错
if __name__ == "__main__":
    with multiprocessing.Manager() as manager:
        # 初始化共享整型变量,初始值为0
        # 若要共享字符串,可改为manager.Value('str', '')
        shared_x = manager.Value('i', 0)

        # 将共享变量作为参数传递给所有进程函数
        p1 = multiprocessing.Process(target=function1, args=(shared_x,))
        p2 = multiprocessing.Process(target=function2, args=(shared_x,))
        p3 = multiprocessing.Process(target=function3, args=(shared_x,))

        p1.start()
        p2.start()
        p3.start()

        p1.join()
        p2.join()
        p3.join()

修改script2.py代码

直接接收传入的共享变量即可,无需声明全局变量:

def function3(shared_x):
    while True:      
        print(shared_x.value * 2)

注意事项

  • 如果有多个进程同时修改共享变量的场景,需要搭配multiprocessing.Lock加锁,避免出现数据竞争问题
  • Manager支持共享列表、字典等复杂数据结构,直接调用manager.list()、manager.dict()即可创建对应类型的共享变量
  • 若只需要共享基础数值类型,也可以用multiprocessing.Value代替Manager,性能更高但仅支持基础类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 13:15:02