我正在製作基於Python的下載程序。截至目前,我有一個可用的基於多處理的控制檯腳本。我想知道如何檢測網絡是否空閒。也就是說,不使用網絡的用戶(瀏覽,瀏覽等)。檢測網絡在Python中是否空閒
它應該能夠做兩件事情在這方面:
- 繼續檢測到空閒網絡時下載。
- 當它檢測到某些網絡活動時暫停下載。
定義'空閒'的一種方法是在網絡活動持續5分鐘的時間內處於最大帶寬的1%時觸發。
有沒有更好的方法來檢測網絡是否空閒?
我正在製作基於Python的下載程序。截至目前,我有一個可用的基於多處理的控制檯腳本。我想知道如何檢測網絡是否空閒。也就是說,不使用網絡的用戶(瀏覽,瀏覽等)。檢測網絡在Python中是否空閒
它應該能夠做兩件事情在這方面:
定義'空閒'的一種方法是在網絡活動持續5分鐘的時間內處於最大帶寬的1%時觸發。
有沒有更好的方法來檢測網絡是否空閒?
我建議使用psutil.network_io_counters
模塊:
返回網絡I/O統計作爲namedtuple包括以下 屬性:
- bytes_sent:字節數發送
- bytes_recv:收到的字節數
- packets_sent:發送的數據包數
- packets_recv:數據包數接收的
- ERRIN:錯誤的總數目,同時接收
- ERROUT:錯誤的總數在發送
- 脫入:其中滴入
- 漏失傳入分組的總數:總數這是(在OSX和BSD總是0)丟棄 傳出的數據包
如果pernic爲True返回每個網絡接口 系統上安裝的作爲與字典相同的信息網絡 接口名稱作爲密鑰和上面描述的作爲 值的namedtuple。
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)
}
你可以把你想要監控的接口上軌道的發送和接收的字節,並且會給你的信息,如果在網絡空閒還是忙碌。
如何檢測哪個進程需要花費多少?爲了真正不干擾用戶的網絡使用,我需要能夠檢測帶寬是否來自其他進程或我自己的下載程序。 – MyPreciousss
在linux系統上,你可以檢查'/ proc/PID/net/dev',並且你還有一個[bwmon](http://thp.io/2010/bwmon/)。我知道mac有nettop,但我不知道如何在BSD系統上做到這一點。 –
或者你可以使用iptables根據源/端口/目的地標記軟件包等。 – Torxed
我有點想知道這是否是正確的方法。您必須平均一段時間並經常檢查,並且您仍然會遇到問題(也就是說,恰好在您決定開始下一個下載段的同時,用戶會點擊啓動網絡活動的某些內容)。
一個更好的方法實際上可能是簡單地將應用程序的下載帶寬限制到一個用戶可配置的級別,因此它只能以X KB/s下載。是的,它會慢一點,但實現起來會更容易,而且更容易理解它的工作原理。
ifconfig eth0會給你rx和tx字節,如果定期運行會給你一個簡單的度量。我會在pexpect(或類似的)中包裝命令並檢查輸出。不過,我也會對正確的方式感興趣。 – Verma
這種方法的問題是我不知道哪個進程需要多少網絡。我想知道這一點,以確定瀏覽器或其他操作是否導致網絡流量,而不是我自己的下載程序。 – MyPreciousss
@MyPreciousss這是一個非常困難的開發應用程序,我之前已經完成,但是您必須訪問每個操作系統的內核並檢索每個進程的網絡統計信息。稍後當我發佈我的答案時,我會詳細介紹。 – enginefree