如何从另一Python代码调用运行中Python程序的方法?
最简单的跨进程调用方案:基于TCP Socket
先修正你原代码里的两个小问题:
- 缺少
import time,否则time.sleep(5)会报错 setq方法里的print(f"New value q={q}")要改为print(f"New value q={self.q}"),否则会触发NameError
下面是改造后的background.py,通过多线程同时运行后台循环和Socket服务端,接收外部请求调用setq方法:
import time import socket import threading class Background: def __init__(self): self.q = 0 # 启动Socket服务线程 self.server_thread = threading.Thread(target=self.start_server) self.server_thread.daemon = True # 主进程退出时自动结束线程 self.server_thread.start() def run(self): while True: print(f"test, q={self.q}") time.sleep(5) def setq(self, x): self.q += x print(f"New value q={self.q}") def start_server(self): # 创建TCP Socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 8888)) # 绑定本地8888端口 server_socket.listen(1) print("等待客户端连接...") while True: client_conn, addr = server_socket.accept() print(f"来自{addr}的连接") # 接收客户端发送的数值 data = client_conn.recv(1024).decode('utf-8') if data.isdigit(): self.setq(int(data)) client_conn.send(b"修改成功") else: client_conn.send(b"无效输入,请发送整数") client_conn.close() if __name__ == "__main__": bg = Background() bg.run()
然后是客户端程序client.py,在另一个终端运行,用来发送修改请求:
import socket def main(): client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(('localhost', 8888)) # 输入要增加的数值 x = input("请输入要加到q的整数:") client_socket.send(x.encode('utf-8')) # 接收返回结果 response = client_socket.recv(1024).decode('utf-8') print(response) client_socket.close() if __name__ == "__main__": main()
运行步骤:
- 第一个终端运行
python background.py,程序会开始循环打印q的值,同时等待客户端连接 - 第二个终端运行
python client.py,输入一个整数回车,就能看到background.py里的q值被修改
这个方案的优势是:
- 只用到Python标准库,不需要额外安装第三方包
- 实现逻辑简单,容易理解和调试
- 支持同一机器上的跨终端进程通信
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

