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

Python中Control进程如何从Generator进程内存获取数据(无磁盘存储)

嘿,我来帮你搞定这个进程间通信的问题!你想让Control.py直接获取Generator.py生成的数据,不用绕磁盘写文件,这完全可以实现,下面给你几个实用的方案:

方案一:通过标准输出(stdout)传递通用数据

这是最直接的方式——让Generator.py把数据序列化成通用格式(比如JSON)后打印到标准输出,Control.py通过subprocess捕获这个输出再反序列化。

修改后的Generator.py

import json

def foo():
    myList = [1,2,3]
    return myList

# 将结果序列化为JSON字符串并打印到标准输出
print(json.dumps(foo()))

修改后的Control.py

import subprocess
import json

# 调用Generator.py,捕获标准输出
result = subprocess.run(
    ["python", "Generator.py"],
    capture_output=True,
    text=True,
    check=True  # 如果Generator运行出错会抛出异常
)

# 反序列化输出得到原始数据
myList = json.loads(result.stdout.strip())
print("从Generator获取的数据:", myList)

为啥选JSON?因为它跨语言通用、格式清晰,就算是其他语言的进程也能解析,安全性也有保障。

方案二:用Pickle序列化Python特有对象

如果你的数据包含Python专属的对象(比如自定义类实例、datetime对象),JSON没法直接序列化,这时候可以用Python自带的pickle模块——但要注意:Pickle只能在Python进程间使用,且绝对不要反序列化不可信来源的数据,存在安全风险。

修改后的Generator.py

import pickle
import sys

def foo():
    myList = [1,2,3]
    return myList

# 序列化后写入标准输出(用二进制模式)
pickle.dump(foo(), sys.stdout.buffer)

修改后的Control.py

import subprocess
import pickle

result = subprocess.run(
    ["python", "Generator.py"],
    capture_output=True,
    check=True
)

# 从二进制输出反序列化得到数据
myList = pickle.loads(result.stdout)
print("从Generator获取的数据:", myList)
方案三:实时流式数据传输

如果Generator.py是持续生成数据(比如循环输出),而非一次性返回结果,那可以用subprocess.Popen来实时读取输出:

修改后的Generator.py

import json
import time

def generate_data():
    # 模拟持续生成数据
    for i in range(5):
        yield [i, i+1, i+2]
        time.sleep(1)

for data in generate_data():
    print(json.dumps(data), flush=True)  # flush=True确保立即输出,不缓存

修改后的Control.py

import subprocess
import json

# 启动进程并实时读取输出
process = subprocess.Popen(
    ["python", "Generator.py"],
    stdout=subprocess.PIPE,
    text=True,
    bufsize=1  # 启用行缓冲,实时读取每一行输出
)

# 逐行处理流式数据
for line in process.stdout:
    data = json.loads(line.strip())
    print("实时收到数据:", data)

# 等待进程结束
process.wait()

这个方案适合需要持续获取数据的场景,比如日志监控、实时计算结果传输。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:05:30