我有一個python腳本,我每10分鐘在我的mac上作爲後臺進程運行。基本上,它從服務器上下載最新的圖像,並根據我的網速,下載一個高分辨率(5Mb/s連接或更好的20MB)或低分辨率(6MB,5至1Mb/s連接)版本的圖片。什麼是低影響的方式來檢查互聯網是否真的很慢的蟒蛇?
因此,在我的腳本開始時,我使用python包speedtest-cli
來測試我的網速。然而,在任何速度測試中固有的是使用我的一些帶寬。
如果可能的話,在進行速度測試之前,我想要做的是一些簡單而非常低的帶寬測試,以便在我進行速度測試之前查看我的網絡連接是否處於某個基準水平。該基線級別可以通過下載速度,ping時間或任何有用的指標來衡量,這些指標可以告知我連接的基本質量。因此,如果我的網絡速度太慢,我會在使用速度測試中的有限帶寬之前退出。
準確性在這裏並不重要。我並不關心慢速和真正慢的互聯網之間的差異。速度測試運行後,如果下載速度不是至少1 Mb/s,則會退出。因此,這個基線測試可以是任何簡單的測試,其中基線低於1 Mb/s的下載速度。
使用ping可能是一個合理的解決方案。另一個question提供了一個在這個gist中提供的ping的解決方案,但這相當複雜,並且需要root來運行,如果可能,我寧願避免它。
下面是我使用的腳本的一個簡單的版本:
import requests
import sys
import os
import logging
import socket
import json
# python himawari.py
# stolen from https://gist.github.com/celoyd/39c53f824daef7d363db
# requires speedtest-cli ('pip install speedtest-cli')
# check if we have internet
def internet(host="8.8.8.8", port=53, timeout=3):
try:
socket.setdefaulttimeout(timeout)
socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect((host, port))
return True
except Exception as ex:
return False
print("Checking internet speed:")
if internet():
print "Internet connection exists..."
os.system("rm -f /Users/scott/git-projects/live-earth-desktop/speedtest.json")
os.system("speedtest-cli --json >> /Users/scott/git-projects/live-earth-desktop/speedtest.json")
else:
print "No internet connection. Quitting..."
os._exit(1)
with open('/Users/scott/git-projects/live-earth-desktop/speedtest.json') as data_file:
try:
data = json.load(data_file)
except ValueError:
print("data was not valid JSON")
os._exit(1)
speed = data["download"]
print_speed = str(round(speed//1000000))
print("Download speed: ~" + print_speed + " Mb/s")
if (speed > 5000000): # 5 Mb/s
print("Internet speed is good. Downloading hi-res image.")
# Download hi-res image here
elif (speed > 1000000): # 1 Mb/s
print("Internet speed is ok. Downloading low-res image.")
# Download low-res image here
else:
print("Internet speed is poor. Quitting.")
os._exit(1)
@TessellatingHeckler我想我不明白你的問題。有各種各樣的原因,我的互聯網可能會很慢。這是一臺筆記本電腦,所以也許我在上午下午與祖母的地方連接超級慢速連接,或者我正在關閉手機。問題是,如果我的網絡不好,我只想讓腳本在使用很多帶寬之前快速退出。 –
Speedtest下載大文件,從而測量下載速度。如果你想盡量減少文件的大小,儘量減少文件大小。可能會使用speedtest選項,或作爲最後的手段 - 在腳本中手動下載。 –
@EugeneLisitsky'speedtest-cli'軟件包沒有任何文件大小選項。如果你能指向另一個可以提供幫助的軟件包,那肯定會受到讚賞。 –