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

如何将prep.py内的Python对象传递给子进程slave.py的全局作用域

有可直接落地的实现方案,你当前用os.system启动的是独立子进程,父子进程内存空间完全隔离,无法直接传递内存中的Python对象,调整prep.py的调用逻辑即可满足需求。

最优方案:用runpy模块执行slave脚本直接注入全局变量

这个方案不需要修改slave.py的原有逻辑,传递的对象可以直接在slave的全局作用域访问。
修改后的prep.py代码如下(你原代码漏了导入os,同步补上):

import sys
import runpy
import os

# 此处定义所有你需要传递到slave的变量/对象
prep_env = {"db_host": "192.168.1.10", "db_port": 3306}
custom_obj = {"user_info": {"id": 1, "name": "test"}}

if __name__ == "__main__":
    # 你原执行命令是python prep.py python slave.py,slave路径对应sys.argv[2]
    slave_path = sys.argv[2]
    # 执行slave脚本,init_globals参数就是注入的全局变量
    runpy.run_path(
        slave_path,
        init_globals={
            "prep_env": prep_env,
            "custom_obj": custom_obj
        },
        run_name="__main__"
    )

执行命令可以进一步简化为python prep.py slave.py,对应把prep.py里的slave_path取值改成sys.argv[1]即可。

完成修改后,你在slave.py中可以直接访问注入的全局变量,无需额外导包:

# slave.py 内直接使用即可
print(prep_env["db_host"])
print(custom_obj["user_info"]["name"])

其他可选方案

如果必须保留子进程启动的方式,可以选择序列化传递:

  • 简单字符串类型可以直接存入环境变量:prep.py中通过os.environ["CUSTOM_VAR"] = "xxx"写入,slave.py中通过os.environ.get("CUSTOM_VAR")读取
  • 复杂Python对象可以用pickle序列化后存入临时文件/管道,slave.py中再反序列化读取,这种方式需要额外处理序列化兼容问题,效率低于第一种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:24:03