Parallel Python无法发现工作节点,求调试指引
调试Parallel Python(pp)节点发现问题的指引
作为并行计算新手遇到这种节点识别不到的情况太正常了,咱们一步步来排查,先从最常见的网络和配置问题入手:
1. 优先确认网络连通性
两台机器的IP分别是192.168.1.4和192.168.56.1,这里要注意:192.168.56.x通常是虚拟机的虚拟网卡IP,大概率不是你Wi-Fi连接的真实网段!
- 在机器1的命令行里执行:
ping 192.168.56.1,看能不能收到回复 - 反过来在机器2执行:
ping 192.168.1.4,同样检查连通性
如果ping不通,说明两台机器不在同一有效子网:- 去机器2的网络设置里找Wi-Fi的真实IP(不是虚拟网卡的),确保和机器1的
192.168.1.x在同一网段 - 重新确认两台机器确实连的是同一个Wi-Fi网络
- 去机器2的网络设置里找Wi-Fi的真实IP(不是虚拟网卡的),确保和机器1的
2. 检查Windows防火墙设置
Windows防火墙默认会阻挡陌生端口的通信,pp默认用的是60000端口:
- 临时关闭两台机器的Windows防火墙(测试用,之后再打开),重新运行机器1的脚本和机器2的ppserver,看能不能识别到节点
- 如果临时关闭后能识别,就给pp添加防火墙规则:
- 允许
python.exe(或者直接指定ppserver.py对应的进程)通过私有网络(你的Wi-Fi)的入站和出站连接 - 或者直接开放60000端口的TCP/UDP通信
- 允许
3. 放弃自动发现,手动指定节点IP
自动发现(ppservers = ("*",))在复杂网络环境下经常失效,咱们先手动指定节点来验证:
修改机器1的SCRIPT1代码:
import pp # 手动指定机器2的IP和端口(默认60000) ppservers = ("192.168.56.1:60000",) job_server = pp.Server(ppservers=ppservers) for computer, cpu_count in job_server.get_active_nodes().iteritems(): print "Found {} with CPU count {}!".format(computer, cpu_count)
运行后如果能识别到机器2,说明自动发现的网络广播有问题;如果还是不行,继续往下排查。
4. 确认机器2的ppserver启动状态
在机器2上,先确认ppserver确实在正常监听:
- 重新启动ppserver,用明确的参数:
python ppserver.py -a -p 60000(-a允许任意客户端,-p指定端口) - 打开命令行执行:
netstat -an | findstr 60000,查看输出里有没有LISTENING状态的记录,确保端口确实在监听
5. 检查两台机器的pp版本一致性
不同版本的pp可能存在兼容性问题:
在两台机器的命令行分别执行:
python -c "import pp; print(pp.__version__)"
确保输出的版本号完全一致,如果不一样,卸载旧版本,重新安装相同版本:
pip uninstall pp pip install pp==[版本号]
6. 测试基础任务提交
如果上面的步骤都没问题,咱们提交一个简单任务来验证连通性:
在机器1运行以下代码:
import pp def simple_task(x): return x * 2 # 手动指定机器2节点 job_server = pp.Server(ppservers=("192.168.56.1:60000",)) print("当前活跃节点:", job_server.get_active_nodes()) # 提交任务到远程节点 job = job_server.submit(simple_task, (5,)) print("任务结果:", job())
如果任务能执行并返回10,说明连通正常;如果报错,根据错误信息(比如连接超时、拒绝连接)再针对性排查。
内容的提问来源于stack exchange,提问作者dreamer
相关产品推荐
相关产品推荐

