我正在制作一个基于Python的下载程序。到目前为止,我有一个工作的基于多处理的控制台脚本。我想知道如何检测网络是否空闲。也就是说,用户自己不使用网络(浏览、冲浪等)。
在这方面,它应该能够做两件事:
定义“空闲状态”的一种方法是,如果网络活动连续5分钟保持在最大带宽的1%,则可以触发。
是否有更好的方法来检测网络是否空闲?
发布于 2013-08-08 19:48:08
我建议使用psutil.network_io_counters模块:
将网络I/O统计信息作为名称返回,包括以下属性:
如果Per尼克是True,则将系统上安装的每个网络接口作为字典返回相同的信息,其中以网络接口名称作为键,而上面描述的名称作为值。
In [1]: import psutil
In [2]: psutil.network_io_counters(pernic=True)
Out[2]:
{'en0': iostat(bytes_sent=143391435L, bytes_recv=1541801914L,
packets_sent=827983L, packets_recv=1234558L, errin=0L, errout=0L,
dropin=0L, dropout=0),
'gif0': iostat(bytes_sent=0L, bytes_recv=0L, packets_sent=0L, packets_recv=0L,
errin=0L, errout=0L, dropin=0L, dropout=0),
'lo0': iostat(bytes_sent=6143860L, bytes_recv=6143860L, packets_sent=55671L,
packets_recv=55671L, errin=0L, errout=0L, dropin=0L, dropout=0),
'p2p0': iostat(bytes_sent=0L, bytes_recv=0L, packets_sent=0L, packets_recv=0L,
errin=0L, errout=0L, dropin=0L, dropout=0),
'stf0': iostat(bytes_sent=0L, bytes_recv=0L, packets_sent=0L, packets_recv=0L,
errin=0L, errout=0L, dropin=0L, dropout=0)
}您可以跟踪要监视的接口上发送和接收的字节,如果网络空闲或繁忙,这将给您提供信息。
发布于 2013-08-14 13:16:38
我想知道这是否是正确的方法。您将不得不在一段时间内进行平均检查,并且经常检查,您仍然会遇到托特图问题(也就是说,就在您决定启动下一个下载段的同时,用户单击一些启动网络活动的内容)。
一个更好的方法可能实际上是简单的节流(到用户可配置的水平?)应用程序的下载带宽,所以它只能以X KB/s的速度下载。是的,它会慢一些,但是它将更容易实现,并且更容易理解它是如何工作的。
https://stackoverflow.com/questions/17983355
复制相似问题