首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检测Python中的网络是否空闲

检测Python中的网络是否空闲
EN

Stack Overflow用户
提问于 2013-08-01 00:34:58
回答 2查看 639关注 0票数 3

我正在制作一个基于Python的下载程序。到目前为止,我有一个工作的基于多处理的控制台脚本。我想知道如何检测网络是否空闲。也就是说,用户自己不使用网络(浏览、冲浪等)。

在这方面,它应该能够做两件事:

  1. 当检测到网络空闲时,恢复下载。
  2. 当检测到某些网络活动时,暂停下载。

定义“空闲状态”的一种方法是,如果网络活动连续5分钟保持在最大带宽的1%,则可以触发。

是否有更好的方法来检测网络是否空闲?

EN

回答 2

Stack Overflow用户

发布于 2013-08-08 19:48:08

我建议使用psutil.network_io_counters模块:

将网络I/O统计信息作为名称返回,包括以下属性:

  • bytes_sent:发送的字节数
  • bytes_recv:接收到的字节数
  • packets_sent:发送的数据包数
  • packets_recv:收到的数据包数
  • errin:接收到的错误总数
  • 错误:发送时出错的总数
  • dropin:被丢弃的传入数据包总数
  • 退出:被丢弃的传出数据包总数( OSX和BSD上总是0)

如果Per尼克是True,则将系统上安装的每个网络接口作为字典返回相同的信息,其中以网络接口名称作为键,而上面描述的名称作为值。

代码语言:javascript
复制
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)
}

您可以跟踪要监视的接口上发送和接收的字节,如果网络空闲或繁忙,这将给您提供信息。

票数 1
EN

Stack Overflow用户

发布于 2013-08-14 13:16:38

我想知道这是否是正确的方法。您将不得不在一段时间内进行平均检查,并且经常检查,您仍然会遇到托特图问题(也就是说,就在您决定启动下一个下载段的同时,用户单击一些启动网络活动的内容)。

一个更好的方法可能实际上是简单的节流(到用户可配置的水平?)应用程序的下载带宽,所以它只能以X KB/s的速度下载。是的,它会慢一些,但是它将更容易实现,并且更容易理解它是如何工作的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17983355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档