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

Python多进程全局变量实时共享问题求助

解决multiprocessing进程间变量共享问题

你的问题根源在于:Python多进程(multiprocessing)的子进程会复制父进程的内存空间,二者拥有独立的内存区域,主进程后续修改的变量无法自动同步到子进程。另外你原代码里主进程的WH和delay是局部变量(没加global声明),连全局变量都没修改,子进程自然拿不到更新后的值。

下面给两种适配你场景的解决方案:

方案1:直接传递参数(适合每次启动新子进程的场景)

这是最简单直接的方式,把读取到的配置作为参数传给子进程,不需要共享变量:

import json
import multiprocessing
import time

def comprobar(wh_val, delay_val):
    print(wh_val)
    print(delay_val)

if __name__ == "__main__":
    while True: 
        with open("configUsers.json") as archivo:
            data = json.load(archivo)
            wh = data['WH']
            delay = data['delay']
            # 将配置作为参数传入子进程
            process = multiprocessing.Process(name="hilo1", target=comprobar, args=(wh, delay))
            process.start()
            time.sleep(0.5)

方案2:用Manager共享字典(适合子进程长期运行、实时读取更新的场景)

如果你的子进程需要持续运行,而非每次重启,用multiprocessing.Manager创建的共享字典可以让主进程和子进程共享变量,实时同步更新:

import json
import multiprocessing
import time

def comprobar(shared_config):
    # 子进程持续读取共享配置
    while True:
        print(shared_config['WH'])
        print(shared_config['delay'])
        time.sleep(0.5)

if __name__ == "__main__":
    # 创建Manager管理共享对象
    manager = multiprocessing.Manager()
    shared_config = manager.dict()

    # 启动长期运行的子进程
    process = multiprocessing.Process(name="hilo1", target=comprobar, args=(shared_config,))
    process.start()

    # 主进程持续读取文件并更新共享配置
    while True: 
        with open("configUsers.json") as archivo:
            data = json.load(archivo)
            shared_config['WH'] = data['WH']
            shared_config['delay'] = data['delay']
        time.sleep(0.5)

说明:

  • 方案1适配你原代码的逻辑:每次读取配置后启动新子进程,直接传参数避免了进程间共享的复杂度。
  • 方案2适合子进程不需要频繁重启的场景,主进程更新共享字典后,子进程能实时读取到最新值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:25:21