Python 这个库开发测试网速工具后,再也不用担心网络异常了
 网速测试这件事,平时要么打开浏览器上 Speedtest.net 手动跑一次,要么压根不测——等到视频会议卡成 PPT 才意识到网络有问题。 用 Python 的 `speedtest-cli` 库把这件事自动化,其实不难。测完之后你可以存数据、画趋势图、低于阈值发告警,比网页版能做的事多不少。 --- #### **安装** ``` pip install speedtest-cli ``` #### **代码** 下面这个脚本完成了查找最优服务器、测速、格式化输出、网络质量评估、按阈值给出建议这几件事: ``` importspeedtest importtime fromdatetimeimportdatetime class NetworkSpeedTester: def __init__(self): self.st = speedtest.Speedtest() self.results = None def find_best_server(self): print("正在搜索最佳测试服务器...") servers = self.st.get_servers() best_server = self.st.get_best_server() print(f"已选择服务器: {best_server['host']} ({best_server['country']})") print(f"服务器距离: {best_server['distance']:.2f} km") returnbest_server def run_speed_test(self, timeout=30): print("\n开始网速测试...") print("正在测试下载速度...") download_speed = self.st.download(timeout=timeout) print("正在测试上传速度...") upload_speed = self.st.upload(timeout=timeout) self.results = self.st.results.dict() return { 'download': download_speed, 'upload': upload_speed, 'ping': self.results['ping'], 'server': self.results['server'] } def format_results(self, test_results): download_mbps = test_results['download'] /1_000_000 upload_mbps = test_results['upload'] /1_000_000 ping_ms = test_results['ping'] quality = self.assess_network_quality(download_mbps, upload_mbps, ping_ms) print("\n"+"="*50) print("网速测试结果") print("="*50) print(f"测试时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") print(f"测试服务器: {test_results['server']['host']}") print(f"服务器位置: {test_results['server']['country']}") print("-"*50) print(f"下载速度: {download_mbps:.2f} Mbps") print(f"上传速度: {upload_mbps:.2f} Mbps") print(f"网络延迟: {ping_ms:.2f} ms") print("-"*50) print(f"网络质量评估: {quality}") print("="*50) return { 'download_mbps': download_mbps, 'upload_mbps': upload_mbps, 'ping_ms': ping_ms, 'quality': quality } def assess_network_quality(self, download, upload, ping): ifping100: speed = "超高速" elifdownload>50: speed = "高速" elifdownload>20: speed = "中速" else: speed = "低速" returnf"{speed}网络,延迟{latency}" def main(): print("Python 网速测试工具 v1.0") print("="*50) try: tester = NetworkSpeedTester() tester.find_best_server() raw_results = tester.run_speed_test(timeout=30) formatted_results = tester.format_results(raw_results) provide_recommendations(formatted_results) exceptspeedtest.ConfigRetrievalError: print("错误:无法连接到 Speedtest 服务器,请检查网络连接") exceptExceptionase: print(f"测试过程中发生错误: {str(e)}") def provide_recommendations(results): print("\n建议:") ifresults['download_mbps'] 100: print(" - 延迟偏高,实时通信和在线游戏体验会变差") print(" 试试切换有线连接,或选择更近的服务器") ifresults['quality'].startswith("高速") andresults['ping_ms'] <50: print(" 当前网络状态良好,适合所有网络应用") if __name__ == "__main__": main() ``` 运行后输出类似这样: ``` Python 网速测试工具 v1.0 ================================================== 正在搜索最佳测试服务器... 已选择服务器: speedtest.example.com (中国) 服务器距离: 125.43 km 开始网速测试... 正在测试下载速度... 正在测试上传速度... ================================================== 网速测试结果 ================================================== 测试时间: 2026-03-26 16:30:15 测试服务器: speedtest.example.com 服务器位置: 中国 -------------------------------------------------- 下载速度: 85.67 Mbps 上传速度: 32.45 Mbps 网络延迟: 28.73 ms -------------------------------------------------- 网络质量评估: 高速网络,延迟良好 ================================================== 建议: 当前网络状态良好,适合所有网络应用 ``` --- #### **可以往哪扩展** 基础功能跑通之后,几个方向可以继续做: - 用 `schedule` 定时跑,把结果写进 CSV 或数据库,记录全天网络波动 - 用 `matplotlib` 把历史数据画成折线图,一眼看出哪个时段网速差 - 设定阈值,低于某个速度或延迟超标时发邮件或企业微信告警 - 用 Flask 或 FastAPI 包一层 Web 界面,方便非技术同事查看历史数据 测速本身是最简单的那一步,数据积累起来之后能做的事才有意思。 **“无他,惟手熟尔”!**有需要的用起来! **如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐**❤!