首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 这个库开发测试网速工具后,再也不用担心网络异常了

Python 这个库开发测试网速工具后,再也不用担心网络异常了

作者头像
用户11081884
发布2026-07-20 20:10:53
发布2026-07-20 20:10:53
90
举报

网速测试这件事,平时要么打开浏览器上 Speedtest.net 手动跑一次,要么压根不测——等到视频会议卡成 PPT 才意识到网络有问题。

用 Python 的 speedtest-cli 库把这件事自动化,其实不难。测完之后你可以存数据、画趋势图、低于阈值发告警,比网页版能做的事多不少。


安装
代码语言:javascript
复制
pip install speedtest-cli
代码

下面这个脚本完成了查找最优服务器、测速、格式化输出、网络质量评估、按阈值给出建议这几件事:

代码语言:javascript
复制
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):
        ifping<20:
            latency = "极佳"
        elifping<50:
            latency = "良好"
        elifping<100:
            latency = "一般"
        else:
            latency = "较差"

        ifdownload>100:
            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'] <10:
        print("  - 下载速度较低,可能影响视频流媒体和大文件下载")
        print("    建议检查网络连接,或联系运营商")

    ifresults['upload_mbps'] <5:
        print("  - 上传速度较低,视频会议和文件上传会受影响")
        print("    可以考虑升级套餐,或优化上传设置")

    ifresults['ping_ms'] >100:
        print("  - 延迟偏高,实时通信和在线游戏体验会变差")
        print("    试试切换有线连接,或选择更近的服务器")

    ifresults['quality'].startswith("高速") andresults['ping_ms'] <50:
        print("  当前网络状态良好,适合所有网络应用")


if __name__ == "__main__":
    main()

运行后输出类似这样:

代码语言:javascript
复制
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 界面,方便非技术同事查看历史数据

测速本身是最简单的那一步,数据积累起来之后能做的事才有意思。

“无他,惟手熟尔”!有需要的用起来!

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 代码
  • 可以往哪扩展
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档