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

同一局域网内控制两台PC执行Python脚本的最优方案是什么

局域网多机Python API调用方案

以下两种方案均不需要开放公网端口,所有通信仅在本地局域网内完成,适配你提到的两款终端的厂商限制。

方案1:SSH远程执行(最小开发成本,适合低频调用)

这是门槛最低的实现方式,无需部署额外中间件:

  • 两台数据PC(装有Eikon和Bloomberg的设备)开启系统自带的OpenSSH服务:Windows系统可直接在「设置>应用>可选功能」中搜索安装OpenSSH服务器,启动后设置为开机自启。在Windows防火墙中新建入站规则,仅允许你的开发机局域网IP访问22端口,禁止其他所有IP访问,完全符合安全要求。
  • 两台数据PC本地提前写好对应API的调用脚本,直接将返回结果打印到标准输出即可,无需修改原有API调用逻辑。
  • 开发机安装paramiko库,通过SSH远程执行两台PC上的脚本,直接获取返回结果。

示例开发机调用代码:

import paramiko

def run_remote_script(host, username, password, script_path):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(host, username=username, password=password, port=22)
    stdin, stdout, stderr = ssh.exec_command(f'python {script_path}')
    result = stdout.read().decode()
    err = stderr.read().decode()
    ssh.close()
    return result, err

# 调用Eikon设备拉取数据
eikon_data, eikon_err = run_remote_script(
    host="192.168.3.102", 
    username="eikon_pc_local_user", 
    password="your_password", 
    script_path="C:\\scripts\\eikon_fetch.py"
)
# 调用Bloomberg设备拉取数据
bbg_data, bbg_err = run_remote_script(
    host="192.168.3.103", 
    username="bloomberg_pc_local_user", 
    password="your_password", 
    script_path="C:\\scripts\\bloomberg_fetch.py"
)

方案2:局域网消息队列(适合高频/异步批量调用)

如果需要频繁拉取数据、做任务调度,推荐用本地消息队列实现异步通信:

  • 选择任意一台局域网设备(推荐你的开发机)部署Redis/RabbitMQ,防火墙仅允许三台设备的局域网IP访问消息队列端口,不对外暴露。
  • 两台数据PC上常驻Python消费者脚本,监听消息队列的任务指令,收到指令后调用本地API拉取数据,再将结果写回消息队列。
  • 开发机作为生产者发送拉取任务,异步等待结果返回即可。

示例Eikon设备常驻消费者代码:

import redis
import eikon as ek
import pandas as pd

# 连接局域网内的Redis
r = redis.Redis(host="192.168.3.101", password="your_redis_password", decode_responses=False)
ek.set_app_key('你的Eikon应用密钥')

while True:
    # 阻塞等待拉取任务
    _, task_msg = r.brpop("eikon_task_queue", timeout=0)
    task_params = eval(task_msg.decode())
    # 调用本地Eikon API
    data, err = ek.get_data(instruments=task_params["rics"], fields=task_params["fields"])
    # 结果写回队列
    r.lpush("eikon_result_queue", data.to_json())

示例开发机发送任务代码:

import redis
import pandas as pd

r = redis.Redis(host="192.168.3.101", password="your_redis_password", decode_responses=False)
# 推送拉取任务
r.lpush("eikon_task_queue", str({
    "rics": ["000001.SZ", "AAPL.O"],
    "fields": ["TR.PriceClose", "TR.Volume"]
}))
# 阻塞等待结果返回
_, result_msg = r.brpop("eikon_result_queue", timeout=30)
df = pd.read_json(result_msg.decode())

注意:两款终端的API调用需遵守厂商的使用许可条款,不要超出授权范围拉取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:24:03