У меня есть скрипт python, который я запускаю как фоновый процесс на моем mac каждые 10 минут. В основном, он загружает самое последнее изображение с сервера и в зависимости от скорости моего интернет-трафика загружает привет-Res (20 Мбит на соединения 5 Мбит/с или лучше) или с низким разрешением (6 Мбит на соединениях 5 до 1 Мбит/с) изображение.Что такое низкий эффект проверки, действительно ли интернет работает на python?
Таким образом, в начале моего скрипта я использую пакет python speedtest-cli
, чтобы проверить скорость моего интернета. Тем не менее, присущий любому тесту на скорость - это использование некоторой моей пропускной способности.
Если возможно, то, что я хотел бы сделать до теста скорости, - это простой тест с очень низкой пропускной способностью, чтобы проверить, не подключено ли мое интернет-соединение на каком-то базовом уровне, прежде чем я проведу свой тест скорости. Этот базовый уровень может быть измерен в скорости загрузки, времени пинга или любой полезной метрики, которая может сообщить мне об основном качестве моего соединения. Таким образом, если мой интернет слишком медленный, я ушел, прежде чем использовать ограниченную полосу пропускания с тестом скорости.
Точность здесь не так важна. Меня не интересует разница между медленным и действительно медленным Интернетом. После запуска теста скорости, если скорость загрузки не меньше 1 Мбит/с, она завершается. Таким образом, этот базовый тест может быть любым простым тестом, где базовый уровень находится где-то ниже скорости загрузки 1 Мбит/с.
Использование ping может быть разумным решением. Другой вариант question предлагает решение для pinging, которое представлено в этом gist, но это довольно сложное и требует запуска 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' нет параметров размера файла. Если вы можете указать мне на другой пакет, который может помочь, это, безусловно, будет оценено. –