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

多进程下使用manager.dict共享Forza遥测数据失败求助

问题分析与解决方案

你的代码逻辑框架没问题,但在manager.dict的实际使用上存在几个易踩的坑,导致另一个进程无法看到更新:

1. 直接打印manager.dict无法实时获取最新数据

manager.dict是跨进程的代理对象,依赖进程间通信同步数据。直接打印整个字典时,其字符串表示可能调用的是本地缓存副本,不会主动拉取远程进程的最新修改。

2. 无延迟循环输出导致内容被覆盖

throttle进程的while True没有延迟控制,会疯狂打印输出,即便字典有更新,也会被大量空输出覆盖,无法观察到变化。

3. 缺少写入操作的验证环节

虽然你确认forza_connect能解析数据,但需要明确验证数据是否真的写入了共享字典。


修复步骤

步骤1:验证共享字典的写入操作

在forza_connect.py的循环中添加打印,确认数据写入状态:

while True:
    packet, packet_source = sock.recvfrom(1024)
    fd.parse(packet)                           
    parsed_data = fd.to_dict()
    # 验证解析后的数据是否有效
    print(f"解析到遥测数据: {parsed_data}")
    for k, v in parsed_data.items():
        packets[k] = v
    # 转换为普通字典后打印,确保获取最新内容
    print(f"共享字典更新后: {dict(packets)}")

步骤2:修改throttle.py的读取逻辑

改为读取具体键值,并添加延迟控制输出频率:

import time

def show_throttle_text(forza_data):
    while True:
        # 读取具体键,强制拉取最新同步数据
        throttle_val = forza_data.get('throttle', 0)
        # 使用\r覆盖当前行,避免刷屏
        print(f"\r油门百分比: {int(throttle_val)}", end='', flush=True)
        # 添加0.1秒延迟,平衡实时性与输出可读性
        time.sleep(0.1)

步骤3:确认进程同步逻辑

你的app.py中Manager的使用是正确的,with语句会保证manager在进程运行期间保持活跃,无需额外修改。


额外注意事项

  • Windows系统下multiprocessing默认使用spawn模式,所有进程启动代码必须放在if __name__ == '__main__':块内,你的代码已符合要求。
  • 可以用Wireshark抓包验证Xbox是否真的向PC的5555端口发送UDP遥测数据包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:00:59