使用Python获取当前实时网络网速,psutil返回值无变化问题咨询
问题原因
psutil.net_io_counters()返回的是系统开机以来对应网卡的累计收发字节总量,你单次打印的数值是从开机到当前的累计总接收字节,本身就是基数极大的增长值,短时间内新增的流量和累计总量相比占比极低,自然只会看到最后三位发生变动。你在任务管理器看到的实时网速是单位时间内的流量增量,和你当前获取的累计值不是同一个统计维度。- 存在网卡匹配错误的可能。如果你当前实际联网用的是Wi-Fi、虚拟网卡、其他物理以太网接口,硬编码读取
"Ethernet"网卡的统计值,自然不会和你实际使用的网络流量同步,看起来就像数值没有明显变化。
所需额外处理步骤
- 先确认你正在使用的活跃网卡名称,运行以下代码打印所有网卡的统计信息,匹配你当前在用的网卡名:
import psutil for nic_name, stats in psutil.net_io_counters(pernic=True).items(): print(f"网卡名:{nic_name} | 累计接收字节:{stats.bytes_recv}")
- 实时网速需要通过两次采样的流量差值除以采样间隔计算得到,同时需要做单位转换(1 Mbps = 1秒传输1*10^6比特,1字节=8比特),示例代码如下:
import psutil import time # 替换为上一步查到的实际在用网卡名 USE_NIC = "Ethernet" last_recv = psutil.net_io_counters(pernic=True)[USE_NIC].bytes_recv # 采样间隔1秒,可根据需求调整 time.sleep(1) current_recv = psutil.net_io_counters(pernic=True)[USE_NIC].bytes_recv # 计算速率并转换为Mbps单位 download_speed_mbps = (current_recv - last_recv) * 8 / 1000 / 1000 print(f"当前下载速率:{download_speed_mbps:.2f} Mbps")
内容的提问来源于stack exchange,提问作者Wilmer Kluever
相关产品推荐
相关产品推荐

