如何计算python脚本使用了多少网络IO?

如何计算python脚本使用了多少网络IO?,python,networking,Python,Networking,假设我们有以下文件script.py import requests response = requests.get("https://example.com") 我可以通过测量响应的大小来估计我使用了多少网络带宽 但是如果剧本更复杂呢?该脚本现在是一个极其复杂的旧文件,它使用了大量不同的库。该脚本从各种不同的网站获取信息,然后处理这些信息,并通过同一目录中的json文件返回结果 现在,我怎样才能知道脚本每次运行使用了多少网络带宽呢?如果你想把事情做好,你必须自己做 #以

假设我们有以下文件
script.py

import requests

response = requests.get("https://example.com")
我可以通过测量
响应的大小来估计我使用了多少网络带宽

但是如果剧本更复杂呢?该脚本现在是一个极其复杂的旧文件,它使用了大量不同的库。该脚本从各种不同的网站获取信息,然后处理这些信息,并通过同一目录中的json文件返回结果


现在,我怎样才能知道脚本每次运行使用了多少网络带宽呢?

如果你想把事情做好,你必须自己做

#以下模块导入是内置的
#以下模块导入是内部的
#以下模块导入是第三方的
导入请求
发送的总长度=0
总长度=0
获取\u发送\u长度=0
get_recv_length=0
发送的邮件长度=0
post_recv_长度=0
旧的\u请求\u方法\u get=requests.get
旧的\u请求\u方法\u post=requests.post
def格式_大小(字节,后缀='B'):
"""
以人类可读的格式返回字节
"""
对于['','K','M','G','T','P','E','Z']中的单位:
如果abs(字节)<1024.0:
返回“%3.1f%s%s%”(字节、单位、后缀)
字节/=1024.0
返回“%.1f%s%s%”(字节,“Y”,后缀)
def rlen(答复):
"""
发送到服务器的大致请求大小
"""
len\u of_meth=len(response.request.method)
len\u of_addr=len(response.request.url)
len\u of_head=len('\r\n'.join('{}{}'.response.request.headers.items()中k,v的格式(k,v))
len_of_body=len(response.request.body如果response.request.body else[])
返回方法的len_+地址的len_+头部的len_+身体的len_
def补丁_get(*args,**kwargs):
"""
委托功能和记录统计信息
"""
全局总发送长度
全局总记录长度
全局获取发送长度
全局获取记录长度
响应=旧的请求方法获取(*args,**kwargs)
发送的总长度+=rlen(响应)
总记录长度+=len(response.content)
get_sent_length+=rlen(响应)
get_recv_length+=len(response.content)
返回响应
def配线柱(*args,**kwargs):
"""
委托功能和记录统计信息
"""
全局总发送长度
全局总记录长度
全球邮政发送长度
全球邮政记录长度
响应=旧的请求方法帖子(*args,**kwargs)
发送的总长度+=rlen(响应)
总记录长度+=len(response.content)
发送后长度+=rlen(响应)
post_recv_length+=len(response.content)
返回响应
requests.get=patched\u get
requests.post=已修补的\u post
打印('总发送长度',格式大小(总发送长度))
打印('总记录长度',格式大小(总记录长度))
resp1=requests.get('http://www.example.com/')
resp2=requests.get('http://www.example.com/')
打印('总发送长度',格式大小(总发送长度))
打印('总记录长度',格式大小(总记录长度))
下面是示例结果

发送的总长度0.0B
总记录长度0.0B
发送的总长度242.0B
总记录长度2.5KB

iftop呢?@Carcigenicate我说的是用编程的方式精确测量它。最好是通过简单的方式在脚本周围添加头或包装器。响应的大小不是您实际使用的网络带宽。这在很大程度上取决于所使用的网络协议,并且您可能无法在进程中精确地测量它,因为,例如,tcp堆栈是在内核中实现的。如果您使用Linux,这些链接可能会有所帮助:--
如果安装了所需的内核模块,这些链接也可以监视网络流量:BPF也可以帮助: