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

如何从另一个Python程序读取mypy.py中循环递增的var_a变量值?

跨进程读取变量值的实现方案

下面提供几种可行的方法,实现read.py读取运行中mypy.py的var_a变量值:

方法1:基于共享内存管理器(推荐)

借助Python的multiprocessing.managers实现进程间变量共享,适合本地进程间高效通信。

修改后的mypy.py:

# mypy.py
import time
from multiprocessing.managers import BaseManager
import threading

var_a = 0

# 定义供外部获取变量的方法
def get_var_a():
    return var_a

# 循环更新变量
def update_var():
    global var_a
    while True:
        var_a += 1
        time.sleep(3)

if __name__ == "__main__":
    # 注册共享管理器
    class VarManager(BaseManager):
        pass
    VarManager.register('get_var_a', callable=get_var_a)
    
    # 启动管理器服务,绑定本地端口和认证密钥
    manager = VarManager(address=('localhost', 50000), authkey=b'secret_key')
    server = manager.get_server()
    
    # 启动变量更新线程,避免阻塞管理器服务
    threading.Thread(target=update_var, daemon=True).start()
    
    # 运行管理器服务
    server.serve_forever()

read.py实现:

# read.py
from multiprocessing.managers import BaseManager

def main():
    # 对接mypy.py的共享管理器
    class VarManager(BaseManager):
        pass
    VarManager.register('get_var_a')
    
    try:
        manager = VarManager(address=('localhost', 50000), authkey=b'secret_key')
        manager.connect()
        var_a = manager.get_var_a()
        print(f"当前var_a的值:{var_a}")
    except ConnectionRefusedError:
        print("错误:mypy.py未启动或服务未运行")

if __name__ == "__main__":
    main()

方法2:文件中转(最简方案)

通过文本文件作为中间介质,mypy.py定期写入变量值,read.py读取文件内容。

修改后的mypy.py:

# mypy.py
import time

def main():
    var_a = 0
    while True:
        var_a += 1
        # 覆盖写入变量值到文件
        with open('var_a_cache.txt', 'w', encoding='utf-8') as f:
            f.write(str(var_a))
        time.sleep(3)
    
if __name__ == "__main__":
    main()

read.py实现:

# read.py
def main():
    try:
        with open('var_a_cache.txt', 'r', encoding='utf-8') as f:
            content = f.read().strip()
            var_a = int(content)
            print(f"当前var_a的值:{var_a}")
    except FileNotFoundError:
        print("错误:未找到缓存文件,请先启动mypy.py")
    except ValueError:
        print("错误:缓存文件内容无效")

if __name__ == "__main__":
    main()

方法3:Socket通信

让mypy.py启动一个TCP服务,read.py作为客户端连接后获取变量值。

修改后的mypy.py:

# mypy.py
import time
import socket
import threading

var_a = 0

# 更新变量的循环
def update_var():
    global var_a
    while True:
        var_a += 1
        time.sleep(3)

# 处理客户端请求
def handle_client(conn):
    global var_a
    conn.send(str(var_a).encode('utf-8'))
    conn.close()

# 启动TCP服务
def start_server():
    host = 'localhost'
    port = 65432
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind((host, port))
        s.listen()
        while True:
            conn, _ = s.accept()
            # 用线程处理请求,避免阻塞更新循环
            threading.Thread(target=handle_client, args=(conn,), daemon=True).start()

if __name__ == "__main__":
    threading.Thread(target=update_var, daemon=True).start()
    start_server()

read.py实现:

# read.py
import socket

def main():
    host = 'localhost'
    port = 65432
    try:
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            s.connect((host, port))
            data = s.recv(1024).decode('utf-8')
            var_a = int(data)
            print(f"当前var_a的值:{var_a}")
    except ConnectionRefusedError:
        print("错误:mypy.py未启动或服务未运行")

if __name__ == "__main__":
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:15:01