Python如何读取另一正在运行进程内的变量值
跨独立Python进程读取运行时变量的实现方案
进程的内存空间是相互隔离的,原有代码中直接
from a import x会在b的进程空间内重新执行a.py的完整代码,拿到的是当前新进程内初始化的x变量,和已经在运行的a进程完全无关,因此值不匹配。
方案1:临时文件中转(最易实现)
无需额外依赖,改造成本极低,适合普通低频率查询场景。
- 修改后的a.py代码:
x = 0 while True: x = x + 1 # 每次更新x后写入本地临时文件,Windows系统可修改为自定义路径 with open("/tmp/current_x.cache", "w") as f: f.write(str(x)) print(x)
- 配套b.py代码:
try: with open("/tmp/current_x.cache", "r") as f: current_x = int(f.read().strip()) print("Current X value =", current_x) except FileNotFoundError: print("a.py进程未启动或已退出")
方案2:Socket通信(稳定可扩展)
适合需要跨设备交互、或需要多查询端的场景,通信稳定。
- 修改后的a.py代码(作为服务端后台监听查询):
import socket import threading x = 0 # 后台线程处理查询请求 def query_server(): server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(("127.0.0.1", 9876)) server.listen(5) while True: conn, _ = server.accept() conn.sendall(str(x).encode("utf-8")) conn.close() threading.Thread(target=query_server, daemon=True).start() while True: x = x + 1 print(x)
- 配套b.py代码(作为客户端请求数据):
import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: client.connect(("127.0.0.1", 9876)) current_x = int(client.recv(1024).decode("utf-8").strip()) print("Current X value =", current_x) except ConnectionRefusedError: print("a.py进程未启动或已退出")
方案3:共享内存(性能最高)
适合高频率读写、对性能要求极高的场景,IO开销极小。
- 修改后的a.py代码:
from multiprocessing import shared_memory x = 0 # 创建名称为x_share的共享内存块,4字节足够存储普通int类型 shm = shared_memory.SharedMemory(name="x_share", create=True, size=4) while True: x = x + 1 # 将x转为字节写入共享内存 shm.buf[:4] = x.to_bytes(4, byteorder="little") print(x) # 进程正常退出前需执行资源清理:shm.close()、shm.unlink()
- 配套b.py代码:
from multiprocessing import shared_memory try: shm = shared_memory.SharedMemory(name="x_share", create=False) current_x = int.from_bytes(shm.buf[:4], byteorder="little") print("Current X value =", current_x) shm.close() except FileNotFoundError: print("a.py进程未启动或已退出")
内容的提问来源于stack exchange,提问作者Andres V
相关产品推荐
相关产品推荐

