我有一个 python 脚本,我每 10 分钟在我的 mac 上作为后台进程运行一次。基本上,它从服务器下载最新图像,并根据我的互联网速度,下载高分辨率(5Mb/s 连接上 20mb 或更好)或低分辨率(5 到 1 Mb/s 连接上 6mb)版本图片。
因此,在我的脚本开始时,我使用 python 包speedtest-cli
来测试我的网速。然而,任何速度测试的内在都是使用我的一些带宽。
如果可能的话,我想在速度测试之前做一些简单且非常低的带宽测试,以便在我进行速度测试之前查看我的互联网连接是否处于某个基线水平。该基线水平可以通过下载速度、ping 时间或任何可以告知我连接的基本质量的有用指标来衡量。因此,如果我的互联网太慢,我会在速度测试用尽任何有限带宽之前退出。
准确性在这里并不重要。我不关心慢速和非常慢的互联网之间的区别。运行速度测试后,如果下载速度低于 1 Mb/s,则退出。因此,此基线测试可以是基线低于 1 Mb/s 下载速度的任何简单测试。
使用 ping 可能是一个合理的解决方案。另一个问题提供了一个用于 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)