私は私のMacで10分ごとにバックグラウンドプロセスとして実行するpythonスクリプトを持っています。基本的に、サーバから最新のイメージをダウンロードし、インターネット速度に応じて、高解像度(5Mb/s接続以上で20MB)または低解像度(5Mb/s接続で6MB)のバージョンをダウンロードします。画像。インターネットがPythonで本当に遅いかどうかをチェックするインパクトの低い方法は何ですか?
このように私のスクリプトの先頭に、私は私のインターネットの速度をテストするためのpythonパッケージspeedtest-cli
を使用しています。しかし、スピードテストには、私の帯域幅の一部が使用されています。
可能であれば、私は速度テストの前にやりたいことは、私は私のスピードテストを行う前に、私のインターネット接続は、いくつかのベースラインレベルであれば、単に確認するためにいくつかの簡単な、非常に低い帯域幅のテストです。そのベースラインレベルは、ダウンロード速度、ping時間、または接続の基本的な品質を私に知らせる有用なメトリックで測定できます。したがって、私のインターネットが遅すぎると、スピードテストで制限された帯域幅を使い切る前に終了します。
精度はそれほど重要ではありません。私は遅いインターネットと本当に遅いインターネットとの違いには関心がありません。スピードテストが実行された後、ダウンロード速度が少なくとも1Mb/sでなければ終了します。したがって、このベースラインテストは、ベースラインが1Mb /秒のダウンロード速度以下のどこかの簡単なテストになります。
pingの使用は妥当な解決策になります。別のquestionは、gistで提供されているpingの解決方法を提供しますが、それはむしろ精巧であり、実行するにはルートを必要とします。
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は大きなファイルをダウンロードし、ダウンロード速度を測定します。インパクトを最小限に抑えたい場合は、ファイルのサイズを最小限に抑えてください。スピードテストオプションを使用しているか、最後の手段として使用している可能性があります。スクリプトで手動でダウンロードしてください。 –
@EugeneLisitsky 'speedtest-cli'パッケージにはファイルサイズオプションがありません。あなたが助けてくれる別のパッケージに私を向けることができれば、それは確かに評価されるでしょう。 –