写代码看每秒网速,最稳妥的做法是每秒读取一次系统网卡累计字节计数器,用两次读数之差乘以8再除以采样间隔,得到Mbps;不要用循环下载文件来“看实时网速”,那会额外消耗带宽且结果受服务器影响。 网卡计数器像水表,单看读数没有意义,两次读数之差才是流速,下面按原理、平台实现、代码参数、选型成本展开。

原理:每秒网速是计数器差分,不是单次下载
1 公式与单位
实时网速监测的核心公式只有一条:
- 速率(Mbps)= Δ字节数 × 8 ÷ Δt ÷ 1,000,000
- 上行、下行分别计算,不要先加总再展示。
- 运营商口径通常用Mbps,下载工具常用MB/s,二者相差8倍。
| 名称 | 换算关系 | 示例 |
|---|---|---|
| Mbps | 1 Mbps=1,000,000 bit/s | 100 Mbps≈12.5 MB/s |
| MB/s | 1 MB/s=8 Mbps | 下载10 MB/s≈80 Mbps |
| 差分采样 | Δbytes×8/Δt/1e6 | 1秒增加12.5 MB→100 Mbps |
2 采样周期与时间源
- 采样周期建议1秒:0.5秒会增加读取与刷新开销,5秒以上实时性不足。
- 时间源用单调时钟:Python用
time.monotonic(),避免系统时间回拨导致负速率。 - 统计范围选物理网卡:排除
lo、docker、veth、br-等虚拟接口,否则容器流量会重复叠加。 - 区分上下行:总速率会把上行下载混在一起,排障时容易误判。
按平台落地:Linux、Windows、macOS、浏览器
1 Linux:/proc/net/dev最轻量
Linux下可直接读取/proc/net/dev,接收字节在第1列,发送字节在第9列,它无需安装依赖,适合脚本和容器外采集,Linux内核文档明确说明这些字段是累计计数,必须差分后才是速率。
import time, psutil
EXCLUDE = ("lo", "docker", "veth", "br-", "virbr")
def snapshot():
total = {"rx": 0, "tx": 0}
for name, c in psutil.net_io_counters(pernic=True).items():
if name.startswith(EXCLUDE):
continue
total["rx"] += c.bytes_recv
total["tx"] += c.bytes_sent
return total
last = snapshot()
t0 = time.monotonic()
while True:
time.sleep(1)
now = snapshot()
t1 = time.monotonic()
dt = t1 t0 or 1e-9
down = (now["rx"] last["rx"]) * 8 / dt / 1e6
up = (now["tx"] last["tx"]) * 8 / dt / 1e6
print(f"↓ {down:.2f} Mbps ↑ {up:.2f} Mbps")
last, t0 = now, t1
2 Windows与macOS:优先系统计数器
Windows可用Get-NetAdapterStatistics或psutil;macOS可用netstat -ib或psutil,两者都要注意虚拟网卡和重复接口行。Python和JavaScript测网速哪个准,取决于测量对象:Python能读系统累计计数器,适合实时监测;JavaScript在浏览器只能拿Network Information API的粗略估计,不能当精确仪表。
| 平台 | 推荐接口 | 注意事项 |
|---|---|---|
| Linux | /proc/net/dev |
累计字节,排除lo |
| Windows | GetIfTable2或psutil |
虚拟网卡多,先过滤 |
| macOS | netstat -ib |
接口重复行需去重 |
| 浏览器 | Network Information API | 仅估计值,非实时测量 |
3 浏览器场景:只能做粗略估计
W3C的Network Information API提供downlink等字段,但规范不保证它是实时精确测量,若在网页里反复fetch大文件测速,会消耗真实流量,还会受CDN节点、并发和缓存影响。写代码看每秒网速的代码怎么写,答案在系统层,不在浏览器层。
参数与精度:E-E-A-T落地要点
1 推荐参数
| 参数 | 建议值 | 理由 |
|---|---|---|
| 采样周期 | 1秒 | 实时性与开销平衡 |
| 单位 | Mbps | 与运营商口径一致 |
| 统计对象 | 物理网卡 | 避免虚拟接口叠加 |
| 时间源 | 单调时钟 | 防系统时间回拨 |
| 展示 | 上下行分开 | 避免总速率误导 |
2 精度与合规
- 服务器带宽测试和本地测速有什么区别:前者关注出口链路、TCP吞吐与RTT,后者关注终端网卡计数器;二者不能互相替代。
- IETF RFC 6349指出TCP吞吐量受RTT、窗口和丢包影响,单次下载不能等同链路带宽。
- 中国信息通信研究院《中国宽带发展白皮书(2025年)》强调,用户侧体验受Wi-Fi、终端能力、内容源调度共同影响。
- 企业部署采集代码时,只读网卡计数,不采集payload;涉及员工终端时,应遵循《个人信息保护法》最小必要原则。
选型与成本:企业场景怎么选
- 企业专线测速工具多少钱一套,通常由节点授权、并发数、看板、告警和合规审计决定;开源方案零授权费,但运维人力要计入总成本。
- 北京上海广州测速节点哪个快,同城或同区域节点通常延迟更低;跨运营商、晚高峰时段差异更大,应固定节点与时段做纵向对比。
- 头部公开测速实践如Ookla、Cloudflare均强调多节点、多时段归一化,不用一次结果下上文小编总结。
- 2026年1月Ookla《Speedtest Global Index》报告仍提示,固定宽带测速结果受测试节点、并发和终端能力影响显著。
写代码看每秒网速,关键不是“下载一个文件看速度”,而是用系统网卡累计字节做1秒差分,过滤虚拟网卡,上下行分开,单位统一为Mbps,把采样周期、时间源、统计范围三项固定下来,代码结果才可复现、可对比、可排障。

问答模块
问:为什么任务管理器或活动监视器显示的网速和代码算出来不一致?
答:常见原因是采样周期不同、单位不同、是否包含虚拟网卡不同,以及刷新平滑策略不同,统一为1秒差分、物理网卡、Mbps后,差异通常会收敛。
问:测速代码采样频率越高越好吗?
答:不是,1秒足够看实时趋势;0.2秒会增加CPU与I/O开销,还可能放大计数器刷新粒度误差,长时间统计建议保留1秒采样并做分钟均值。
问:浏览器里能不能精确写代码看每秒网速?
答:不能精确,浏览器没有系统级网卡累计计数器,Network Information API只给估计值;下载测速会消耗流量且受服务器影响,精确监测应放在桌面端或服务端。
如果你正在落地网速监测,先把采样周期和网卡过滤两项定下来,再谈看板与告警。
参考文献
工业和信息化部. 2025年通信业统计公报. 2026年1月.

中国信息通信研究院. 中国宽带发展白皮书(2025年). 2025年12月.
Python Software Foundation. psutil Documentation(6.x). 2025年.
IETF. RFC 6349: Framework for TCP Throughput Testing. 2011年.
到此,以上就是小编对于写代码看每秒网速的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/496623.html