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

如何从另一Python代码调用运行中Python程序的方法?

最简单的跨进程调用方案:基于TCP Socket

先修正你原代码里的两个小问题:

  1. 缺少import time,否则time.sleep(5)会报错
  2. 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()

运行步骤:

  1. 第一个终端运行python background.py,程序会开始循环打印q的值,同时等待客户端连接
  2. 第二个终端运行python client.py,输入一个整数回车,就能看到background.py里的q值被修改

这个方案的优势是:

  • 只用到Python标准库,不需要额外安装第三方包
  • 实现逻辑简单,容易理解和调试
  • 支持同一机器上的跨终端进程通信

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:40:12