如何使用Python计算当前实时互联网连接速度
操作系统当前实际网络连接速度获取方案
你提到的speedtest-cli这类工具测的是最大可用带宽,和当前时刻系统实际正在使用的网络传输速率不是同一个指标,后者可以通过直接读取系统网络接口的统计数据计算得到,不需要额外下载测试文件。
跨平台Python实现方案(推荐用于自研程序开发)
可以用psutil模块,它能直接读取各操作系统底层的网络接口统计数据,通过两次采样的差值计算时间窗口内的实际上下行速率,代码示例如下:
import psutil import time def get_current_network_speed(interval=1): # 获取初始网络字节统计 initial_net_io = psutil.net_io_counters() initial_bytes_sent = initial_net_io.bytes_sent initial_bytes_recv = initial_net_io.bytes_recv # 等待指定时间间隔 time.sleep(interval) # 获取二次采样统计 final_net_io = psutil.net_io_counters() final_bytes_sent = final_net_io.bytes_sent final_bytes_recv = final_net_io.bytes_recv # 计算速率 单位转换为Mbps upload_speed = (final_bytes_sent - initial_bytes_sent) * 8 / (1024 * 1024 * interval) download_speed = (final_bytes_recv - initial_bytes_recv) * 8 / (1024 * 1024 * interval) return round(upload_speed, 2), round(download_speed, 2) # 调用示例:获取1秒窗口内的实际网络速率 up, down = get_current_network_speed() print(f"当前上行速率: {up} Mbps, 当前下行速率: {down} Mbps")
- 上述代码返回的是
interval时间窗口内的系统平均实际传输速率,完全不需要访问外部服务器或下载测试文件,采集的就是系统当前真实的网络使用速度 - 如果需要指定单个网卡的速率,可以将
psutil.net_io_counters()替换为psutil.net_io_counters(pernic=True)[网卡名称]即可 - 依赖安装命令:
pip install psutil
各系统原生命令获取方式(无需代码嵌入时使用)
- Windows:可以直接在命令行执行
netstat -e,间隔执行两次计算差值即可得到实际传输量,也可以用性能计数器的\Network Interface(*)\Bytes Total/sec指标 - Linux:执行
cat /proc/net/dev读取网卡统计,或使用iftop、nload命令直接查看实时速率 - macOS:执行
netstat -ib读取网卡统计,或使用活动监视器的网络标签页查看实时速率
内容的提问来源于stack exchange,提问作者Amir Mohammad Fallah
相关产品推荐
相关产品推荐

