本网站是本人的个人博客网站海外站,国内网站为https://suyihang15.com,本网站主要面对海外用户

网络测速工具

项目地址:suyihang15/network_speed_test: 基于puython的网络测速软件

下载链接 https://github.com/suyihang15/network_speed_test/releases/download/1.0.0/network_speed_test.exe

🌐 网络测速工具

基于 Python 的可视化网络测速工具,支持下载速度、上传速度、网络延迟三项核心指标测试,提供实时速度曲线与历史记录。

功能特性

  • 📥 下载测速 — 通过 Speedtest.net 多线程并发下载,精确测量带宽上限
  • 📤 上传测速 — 多线程上传测试,真实反映上行带宽
  • 📡 延迟测试 — 测量到最优服务器的往返时延 (RTT)
  • 📈 实时曲线 — 测试过程中通过 psutil 监控网卡流量,实时绘制速度变化曲线
  • 🎨 速度仪表盘 — 大字数字显示 + 彩色进度条,速度分级自动变色
  • 📋 历史记录 — 自动保存最近 50 条测试结果,支持查看和清除
  • 🌙 深色主题 — 现代暗色 UI,护眼且专业

界面布局

┌─────────────────────────────────────────────────────────┐
│  📊 实时数据          │  📈 实时速度曲线                 │
│                        │                                 │
│  📥 下载速度           │   ┊      ╱╲                    │
│   85.6 Mbps           │   ┊  ╱╲╱  ╲╲╲╲  下载 (绿)     │
│   ████████░░░░ 40%    │   ┊ ╱        ╲──  上传 (蓝)    │
│                        │   ┊╱          ╲╲               │
│  📤 上传速度           │  ─┼─────────────────            │
│   32.1 Mbps           │   0s        15s         30s     │
│   ████░░░░░░░░ 16%    │                                 │
│                        ├─────────────────────────────────│
│  📡 网络延迟           │  📋 历史记录                    │
│   12 ms                │  时间         │下载   │上传   │延迟│
│   ████████████ 12%     │  2024-01-01   │85.6  │32.1  │12 │
│                        │  ...          │...   │...   │.. │
│  服务器: China Telecom │                                 │
├─────────────────────────────────────────────────────────┤
│  [🚀 开始测速]  [🗑 清除历史]          状态: 就绪       │
└─────────────────────────────────────────────────────────┘

工作原理

测速流程

用户点击开始
    │
    ▼
┌──────────────────┐
│ 1. 选择最优服务器  │  speedtest.get_best_server()
│    测延迟,选最近   │  根据地理位置和延迟自动选择
└──────┬───────────┘
       │
       ▼
┌──────────────────┐
│ 2. 记录基线流量    │  psutil.net_io_counters()
│    扣除背景噪声    │  采样 0.5s, 计算背景带宽
└──────┬───────────┘
       │
       ▼
┌──────────────────┐
│ 3. 延迟测试 (Ping) │  HTTP 往返时间测量
│    → 得到延迟 ms   │  取多次平均值
└──────┬───────────┘
       │
       ▼
┌──────────────────┐
│ 4. 下载测试       │  多线程 HTTP GET
│    多连接并发下载  │  持续 ~10 秒
│    → 得到下载速度  │  采样网卡流量 → 实时曲线
└──────┬───────────┘
       │
       ▼
┌──────────────────┐
│ 5. 上传测试       │  多线程 HTTP POST
│    多连接并发上传  │  持续 ~10 秒
│    → 得到上传速度  │  采样网卡流量 → 实时曲线
└──────┬───────────┘
       │
       ▼
┌──────────────────┐
│ 6. 保存结果       │  JSON 持久化
│    刷新仪表盘     │  更新历史表格
└──────────────────┘

实时速度监控原理

本工具通过 psutil 库直接读取操作系统网卡计数器,在测速过程中每 200ms 采样一次流量数据:

速度 = (当前累计字节 - 上次累计字节) × 8 ÷ 时间间隔
      ─────────────────────────────────────────────────
              实时 bps (bits per second)

为了避免后台应用(浏览器、系统更新等)的网络流量干扰测量结果,在测速开始前会先采集一段 基线流量

实际速度 = 原始采样速度 - 基线速度

这种方式比单纯用 已传输字节 ÷ 总时间 能更细腻地反映速度波动,画出来的曲线也更真实。

技术栈

组件作用
GUI 框架tkinterPython 内置,构建窗口和控件
测速引擎speedtest-cli连接 Speedtest.net 全球节点,多线程并发测速
实时监控psutil读取操作系统网卡 I/O 计数器
数据可视化matplotlib实时速度曲线图,嵌入 tkinter
线程管理threading后台测速 + 主线程 UI 刷新 = 界面不卡死

线程模型

┌─────────────────────────────────────────────┐
│                  主线程 (Main)                │
│  tkinter.mainloop()                         │
│  每200ms: after() → 刷新图表 + 刷新仪表盘     │
└─────────────────────────────────────────────┘
         │ 启动                      ▲ 读取
         ▼                           │ deque
┌─────────────────┐    ┌──────────────────────┐
│  测速线程        │    │  网络监控线程         │
│  (Test Thread)   │    │  (Monitor Thread)    │
│                  │    │                      │
│  speedtest 库    │    │  while 测速进行中:   │
│  执行完整流程     │    │    sleep(200ms)     │
│  (阻塞式 API)    │    │    读 psutil 计数器  │
│                  │    │    push → deque      │
└─────────────────┘    └──────────────────────┘

三个线程通过 collections.deque 进行数据交换 — CPython 的 GIL 使得 deque.append 和迭代操作具有原子性,无需额外加锁。

安装与运行

环境要求

  • Python 3.7+
  • Windows / macOS / Linux

安装依赖

pip install -r requirements.txt

requirements.txt 内容:

speedtest-cli    # Speedtest.net 测速后端
psutil           # 系统网络流量监控
matplotlib       # 实时速度曲线图
requests         # HTTP 请求 (备用)

启动程序

python network_speed_test.py

打包为独立 EXE (可选)

pip install pyinstaller
pyinstaller --onefile --windowed --name "网络测速工具" network_speed_test.py

项目结构

新建文件夹 (3)/
├── network_speed_test.py   # 主程序 (679 行)
├── requirements.txt        # Python 依赖
└── README.md               # 本文件

常见问题

Q: 测速结果与实际带宽不符?
A: 测速结果受多种因素影响:WiFi 信号强度、路由器性能、运营商 QoS 策略、同时段网络拥塞等。建议在不同时段多次测试取平均值。

Q: 实时曲线波动很大?
A: 正常现象。psutil 监控的是整个网卡的所有流量(包含后台应用),即使扣除了基线,短时间内也会有波动。最终结果以 speedtest-cli 库返回的精确值为准。

Q: 提示 “speedtest-cli 未安装”?
A: 运行 pip install speedtest-cli 安装即可。如果网络受限,可以手动下载 wheel 包安装。

Q: 提示 “psutil 未安装”?
A: psutil 用于实时曲线功能。运行 pip install psutil 安装。即使没有 psutil,基础测速功能仍然可用(仅无实时曲线)。

Q: 测速失败 / 服务器不可达?
A: 可能是 Speedtest.net 服务器被防火墙拦截,或当前网络不通。请检查网络连接,关闭 VPN/代理后重试。

0 条对“网络测速工具”的回复

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

© 2026 苏的小站

Go to top