You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python构建以太网收发速度监控测量模块的技术咨询

基于psutil实现以太网收发速度监控的Python模块方案

嘿,你选psutil绝对是个好主意——它几乎是Python生态里做系统资源监控的标配,用来实现以太网收发速度测量完全没问题!我来给你梳理下具体的实现思路和代码示例,帮你快速把这个模块搭起来。

核心原理说明

psutil.net_io_counters(pernic=True)返回的是从系统启动以来的累计网络统计数据,比如你给出的示例里:

'Ethernet 5': snetio(bytes_sent=211080874L, bytes_recv=929895370L, packets_sent=667031L, packets_recv=2757846L, errin=0L, errout=0L, dropin=0L, dropout=0L)

其中bytes_sent和bytes_recv就是我们需要的累计收发字节数。要得到实时速度,我们只需要间隔固定时间取两次累计值,用差值除以时间间隔即可。

具体实现步骤

1. 安装psutil库

如果还没安装,先执行:

pip install psutil

2. 基础监控函数实现

下面是一个可直接复用的监控函数,包含速度计算和单位转换:

import psutil
import time

def get_ethernet_speed(interface_name, interval=1):
    """
    获取指定以太网接口的实时收发速度
    
    参数:
        interface_name: 目标网卡名称(如'Ethernet 5')
        interval: 采样时间间隔(默认1秒)
    
    返回:
        包含收发速度的字典,支持字节/秒和MB/s两种单位
    """
    # 获取初始累计数据
    initial_stats = psutil.net_io_counters(pernic=True)[interface_name]
    init_sent = initial_stats.bytes_sent
    init_recv = initial_stats.bytes_recv
    
    time.sleep(interval)
    
    # 获取间隔后的累计数据
    current_stats = psutil.net_io_counters(pernic=True)[interface_name]
    curr_sent = current_stats.bytes_sent
    curr_recv = current_stats.bytes_recv
    
    # 计算速度(字节/秒)
    send_speed = (curr_sent - init_sent) / interval
    recv_speed = (curr_recv - init_recv) / interval
    
    # 转换为更易读的MB/s(保留两位小数)
    return {
        "send_bytes_per_sec": round(send_speed, 2),
        "recv_bytes_per_sec": round(recv_speed, 2),
        "send_mb_per_sec": round(send_speed / (1024 * 1024), 2),
        "recv_mb_per_sec": round(recv_speed / (1024 * 1024), 2)
    }

3. 持续监控示例

如果需要集成到性能程序中做持续监控,可以把函数放到循环里:

if __name__ == "__main__":
    # 替换成你的目标网卡名称
    target_interface = "Ethernet 5"
    
    # 先验证网卡是否存在,避免报错
    if target_interface not in psutil.net_io_counters(pernic=True):
        print(f"错误:未找到网卡 {target_interface}")
        print("可用网卡列表:", list(psutil.net_io_counters(pernic=True).keys()))
        exit(1)
    
    print(f"开始监控 {target_interface} 收发速度...(按Ctrl+C停止)")
    try:
        while True:
            speed_data = get_ethernet_speed(target_interface)
            print(f"发送速度: {speed_data['send_mb_per_sec']} MB/s | 接收速度: {speed_data['recv_mb_per_sec']} MB/s")
            time.sleep(1)
    except KeyboardInterrupt:
        print("\n监控已停止")

注意事项

  • 确保网卡名称准确:可以用print(list(psutil.net_io_counters(pernic=True).keys()))列出所有可用网卡名称
  • 采样间隔可调整:如果需要更精确的瞬时速度,可缩小间隔;如果要统计平均速度,可增大间隔
  • 异常处理:实际集成到性能程序时,建议添加网卡不存在、权限不足等异常处理逻辑

内容的提问来源于stack exchange,提问作者user3205436

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:40:36