Я живу в Германии, и Германия известна своим разнообразием. Люди разнообразны, культура разнообразна, а качество интернет-соединений одинаково как разнообразно. Разговаривая с моим интернет-провайдером, который настаивал, что у меня нет проблем с моим интернет-соединением, я решил написать программу для мониторинга моей скорости загрузки и загрузки.
Начиная
Мы будем использовать две прохладные пакеты в Python а именно скорость
и matplotlib.
. скорость
предоставит нам информацию о нашем интернет-соединении и Матплотлиб
позволит нам генерировать графики на основе этой информации.
Будь вы в Виртуальная среда Или не использование одного вам придется установить Speedtest и MatPlotlib.
pip install matplotlib pip install speedtest-cli
Мы также будем использовать несколько встроенных пакетов Python datetime
и CSV.
. CSV (или разделенные запятыми значениями) являются быстрым способом хранения данных. Мы будем использовать это, чтобы сохранить информацию о наших скоростях в Интернете, а затем, используя matplotlib, чтобы сделать эту информацию визуально.
Сбор данных
Создайте файл Python под названием мониторинг
touch monitor.py
и давайте поместим следующий код на внутренней стороне
import speedtest s = speedtest.Speedtest() while True: print(s.download(), s.upload())
И мы должны быть встречены следующим выходом перед ударом Ctrl + C
Выйти из этой бесконечной петли.
75020309.22943133 24381170.373616524 105192450.00822952 40653433.153288215
Поэтому, создав новый экземпляр SpeedTest AS S и проверки скорости загрузки и загрузки, нам дают скорость загрузки и загрузки в битах в секунду. Чтобы преобразовать это в Megabits в секунду (MB/S), мы можем сделать следующее, чтобы включить время теста:
import speedtest import datetime s = speedtest.Speedtest() while True: time = datetime.datetime.now().strftime("%H:%M:%S") downspeed = round((round(s.download()) / 1048576), 2) upspeed = round((round(s.upload()) / 1048576), 2) print(f"time: {time}, downspeed: {downspeed} Mb/s, upspeed: {upspeed} Mb/s")
который дает:
time: 12:44:15, downspeed: 95.04 Mb/s, upspeed: 32.85 Mb/s time: 12:44:35, downspeed: 99.46 Mb/s, upspeed: 38.76 Mb/s time: 12:44:56, downspeed: 100.59 Mb/s, upspeed: 38.94 Mb/s
Теперь мы будем двигаться дальше, чтобы записать это в файле CSV. CSV – это большие текстовые файлы, которые значения, разделенные запятыми. Вот пример одного из моих:
time,downspeed,upspeed 12:17:01,100.05,38.28 12:17:21,100.53,37.85 12:17:42,74.87,25.92
Начнем с заголовка ROW, а затем с расщеплением информации. Мы можем думать об этом, как лист Excel:
Чтобы записать в файл CSV в Python, нам нужно импортировать пакет CSV и «Открыть» файл CSV (если он не существует, это не будет создавать его).
import speedtest import datetime import csv s = speedtest.Speedtest() with open('test.csv', mode='w') as speedcsv: csv_writer = csv.DictWriter(speedcsv, fieldnames=['time', 'downspeed', 'upspeed']) csv_writer.writeheader() while True: time = datetime.datetime.now().strftime("%H:%M:%S") downspeed = round((round(s.download()) / 1048576), 2) upspeed = round((round(s.upload()) / 1048576), 2) csv_writer.writerow({ 'time': time, 'downspeed': downspeed, "upspeed": upspeed })
Поэтому, хотя вы позволяете этот код пройти 4-5 минут, мы можем обсудить, что происходит. Линия 7 с открытым
staturelly создает файл CSV с именем test.csv
с заголовками Имя
, снизить скорость
и Upspeed
и писает их в CSV. Тогда цикл начинается и каждый раз, когда SpeedTest проводится тест, он записывает новую строку в CSV со временем, скорость загрузки и скорости загрузки мы указали ранее. Так что давайте пойдем и посмотрим на это сейчас.
time,downspeed,upspeed 12:51:16,99.29,38.66 12:51:37,100.67,38.79 12:51:57,99.7,38.79 12:52:17,92.89,31.99 12:52:38,99.4,38.96
Cool Теперь мы собираем информацию и храним ее в CSV. Вы могли бы сделать всевозможные умные вещи с именем файла, как имя ИТ сегодняшняя дата использования datetime
Но на данный момент я буду держать это в качестве теста.
Вы также можете настроить проверку, чтобы увидеть, прошло ли определенное количество времени и остановить приложение после этого, но я оставлю это до вашего собственного творчества.
Визуализация данных
Давайте сделаем другой файл Python для создания графика нашего подключения к Интернету. Это где мы будем использовать matplotlib.
touch make_graph.py
import matplotlib.pyplot as plt import csv import matplotlib.ticker as ticker times = [] download = [] upload = []
Самый простой способ создать график, используя массив. Для заполнения наших массивов нам придется повторять наш новый файл CSV
with open('test.csv', 'r') as csvfile: plots = csv.reader(csvfile, delimiter=',') next(csvfile) for row in plots: times.append(str(row[0])) download.append(float(row[1])) upload.append(float(row[2])) print(times, "\n", download, "\n", upload)
['12:51:16', '12:51:37', '12:51:57', '12:52:17', '12:52:38'] [99.29, 100.67, 99.7, 92.89, 99.4] [38.66, 38.79, 38.79, 31.99, 38.96]
Так что теперь мы разбираем наши данные! Следующая (CSVFile) по существу пропускает ряд заголовков (которые были только для нашей выгоды, а не Python). Теперь мы продолжаем использовать MatPlotlib, на котором я без стандартов и экспертов. Их документация это обширный .
plt.figure(30, 30) plt.plot(times, download, label='download', color='r') plt.plot(times, upload, label='upload', color='b') plt.xlabel('time') plt.ylabel('speed in Mb/s') plt.title("internet speed") plt.legend() plt.savefig('test_graph.jpg', bbox_inches='tight')
Этот код рассказывает MATPLOTLIB или PLT
Чтобы создать фигуру с линиями, помеченными «загрузкой» и «загрузка», которая будет нанесена против их соответствующих массивов. Таким образом, для каждого элемента в загрузке и массиве времени на графике будет сделана знак на графике. Наконец, ось X и Y получают этикетки, и график сохраняется.
Потенциальные улучшения
Это короткая форма проекта, который я недавно закончил, который содержит автоматические загрузки на облачную платформу, сам по графикам уже ежедневно делает аннотации самой низкой скорости загрузки. Я изначально сделал его жаловаться на мой интернет-провайдер, однако я знаю, что это будет похоже на показывать граф к кирпичной стене.
Если у вас есть какие-либо вопросы об этом руководстве, пожалуйста, не стесняйтесь обращаться ко мне.
@jsphwllng.
Оригинал: “https://dev.to/jsphwllng/monitor-your-internet-with-python-3pp8”