- Проверка скорости интернета библиотекой Requests в мультипроцессинге
- Библиотека проверки скорости интернета — Speedtest
- Установка
- Возможности speedtest-cli
- Использование speedtest в Python
- Дополнение
- Проверка скорости интернета Linux
- Проверка скорости интернета через терминал
- Установка SpeedTest-cli
- Проверка скорости интернет
- Выводы
Проверка скорости интернета библиотекой Requests в мультипроцессинге
Сегодня речь пойдет о том, как из идеи по замеру скорости, был создан скрипт для загрузки файла изображения и отправки его же обратно на сервер, с расчетом времени выполнения каждой из функций и вычисления скорости.
Начну со списка используемых библиотек:
- import os
- from multiprocessing import Pool
- import time
- import pandas as pd
- import requests
def download(id, path): start = time.time() file_name = str(id) + str(path.split('/')[-1]) try: r = requests.get(path, stream=True, timeout=5) except: return 0 size = int(r.headers.get('Content-Length', 0)) with open(file_name, 'wb') as f: for chunk in r.iter_content(chunk_size=1024): if chunk: f.write(chunk) end = time.time() duration = end - start sp = (((size * 8) / 1024) / 1024) / duration return sp
Теперь подробнее о том, что происходит.
В функции есть время старта и время окончания(в секундах), из которых в дальнейшем мы получаем время жизни. В имя файла записываем id сервера и название изображения(сделано для того, чтобы не возникало конфликтов при загрузке из множества источников). Далее делаем GET запрос, получаем размер файла(в байтах) и сохраняем его на диск. Переводим байты в биты, еще немного магии с формулами и на выходе имеем скорость в MBit/s.
Следующая функция — отдача файла на сервер:
def upload(id, path): start = time.time() file_name = str(id) + 'random7000x7000.jpg' with open(file_name, 'rb') as f: files = try: requests.post(path, files=files) except: return 0 size = os.path.getsize(file_name) end = time.time() duration = end - start sp = (((size * 8) / 1024) / 1024) / duration return sp
Здесь принцип тот же, только мы берем файл из локальной папки и POST запросом отправляем.
Наша следующая задача получить данные из двух предыдущих функций. Пишем еще одну функцию:
def test_f(conn, server): speed_download = download(server['server_id'], server['download']) speed_upload = upload(server['server_id'], server['upload']) return server['server_id'], speed_download, speed_upload
Осталось дело за малым, прикрутить мультипроцессинг с пулом и параллельной функцией map:
def main(): pool = Pool() data = pool.map(test_f, server_list) df = pd.DataFrame(data, columns=['Server', 'Download', 'Upload']) print(df) pool.close() pool.join()
if __name__ == '__main__': main()
Скрипт готов к использованию, для удобства вывода я использовал библиотеку pandas. Так же вывод можно поместить в базу и собирать статистику для анализа.
UPD: Поправил исключения, внес правки в работу мультипроцессинга(заменил цикл на параллельную функцию), добавил таймаут для GET запроса
Библиотека проверки скорости интернета — Speedtest
Python — широко используемый высокоуровневый язык программирования общего назначения. Он используется для веб-разработки, машинного обучения и даже приложений с графическим интерфейсом. Его же можно использовать для проверки скорости интернета. Для этого в Python есть несколько библиотек. Одна из таких — speedtest-cli.
Speedtest-cli — это интерфейс командной строки для проверки скорости с помощью сервиса speedtest.net.
Установка
Модуль не является предустановленным в Python. Для его установки нужно ввести следующую команду в терминале:
После установки библиотеки можно проверить корректность и версию пакета. Для этого используется такая команда:
& speedtest-cli --version speedtest-cli 2.1.2 Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)]
Возможности speedtest-cli
Что делает Speedtest-CLI?
Speedtest-cli — это модуль, используемый в интерфейсе командной строки для проверки пропускной способности с помощью speedtest.net. Для получения скорости в мегабитах введите команду: speedtest-cli .
Это команда даст результат скорости в мегабитах. Для получения результата в байтах нужно добавить один аргумент к команде.
$ speedtest-cli --bytes Retrieving speedtest.net configuration. Testing from ******** (******). Retrieving speedtest.net server list. Selecting best server based on ping. Hosted by ******** (***) [1.85 km]: 3.433 ms Testing download speed. Download: 22.98 Mbyte/s Testing upload speed. Upload: 18.57 Mbyte/s
Также с помощью модуля можно получить графическую версию результата тестирования. Для этого есть такой параметр:
$ speedtest-cli --share Retrieving speedtest.net configuration. Testing from ***** (****). Retrieving speedtest.net server list. Selecting best server based on ping. Hosted by ***** (***) [1.85 km]: 3.155 ms Testing download speed. Download: 164.22 Mbit/s Testing upload speed. Upload: 167.82 Mbit/s Share results: http://www.speedtest.net/result/11111111111.png
Команда вернет ссылку, по которой можно перейти в браузере:
Для вывода более простой версии результатов теста, в которой будут только сведения о пинге, скорости скачивания и загрузки используйте параметр —simple .
$ speedtest-cli --simple Ping: 3.259 ms Download: 182.49 Mbit/s Upload: 172.16 Mbit/s
Использование speedtest в Python
Рассмотрим пример программы Python для тестирования скорости интернета:
import speedtest st = speedtest.Speedtest() option = int(input(''' Выбери тип проверки: 1 - Скорость скачивания 2 - Скорость загрузки 3 - Пинг Твой выбор: ''')) if option == 1: print(st.download()) elif option == 2: print(st.upload()) elif option == 3: servernames =[] st.get_servers(servernames) print(st.results.ping) else: print("Пожалуйста, введите цифру от 1 до 3!")Результат выполнения этой простой программы будет такой:
Выбери тип проверки: 1 - Скорость скачивания 2 - Скорость загрузки 3 - Пинг Твой выбор: 2 136433948.59785312
Дополнение
Что бы погрузится в библиотеку speedtest-cli используйте команду --help , что бы получить список всех доступных параметров:
speedtest-cli --help # или speedtest-cli -h
Проверка скорости интернета Linux
Скорость подключения к интернету - это очень важный параметр работы сети. При подключении к интернету в офисе или дома может понадобиться проверить скорость интернета linux. Обычно, для этого достаточно открыть какой-либо сайт и скачать файл. Но это не единственный способ.
Проверка скорости интернета Linux может быть выполнена с помощью специального сервиса - speedtest.net. Вы можете открыть сайт проекта в браузере, программа определит ближайший к вам сервер, а затем покажет скорость доступа к этому серверу. Для работы сервиса используется флеш-плеер. Но не это тема нашей статьи. Сегодня мы рассмотрим как узнать скорость сети linux через терминал.
Проверка скорости интернета через терминал
Конечно, вы могли бы скачать файл с помощью wget и таким образом узнать скорость интернета. Но тогда на скорость загрузки будет влиять не только пропускная способность вашей сети, но и скорость отдачи сервера. Поэтому лучше использовать сервис speedtest, это, возможно, даже из командной строки.
speedtest-cli - это скрипт, написанный на Python, который позволяет измерить скорость интернета linux в двух направлениях. Вы можете проверять скорость сети на определенном расстоянии или для конкретных серверов, а также делиться своим результатом в интернете.
Установка SpeedTest-cli
Утилита может быть установлена двумя способами. Или из репозитория пакетов Python, либо прямо с Github, мы рассмотрим оба способа. Начнем с более сложного.
Сначала обновите систему до самой последней версии:
Установите скрипт установки пакетов python:
sudo apt install python-pip
Затем установите саму программу speedtest-cli с помощью pip:
sudo pip install speedtest-cli
Второй способ еще проще, сначала скачайте файл программы с GitHub и дайте ему права на выполнение:
wget -O speedtest-cli https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
$ chmod +x speedtest-cliВы можете скопировать скрипт в папку /bin или выполнять его прямо из этой папки.
Проверка скорости интернет
Чтобы проверить скорость интернет linux достаточно запустить скрипт без параметров:
Вы можете посмотреть результат проверки в байтах, а не в битах:
Если хотите поделиться результатом с друзьями, можно попросить программу создать изображение:
Для получения информации только о ping, скорости загрузки и отдачи:
Посмотреть список доступных серверов можно с помощью параметра --list:
Теперь вы можете определить скорость соединения с нужным сервером, для этого достаточно указать ид сервера:
Чтобы вывести версию утилиты выполните:
А для просмотра всех возможных опций программы:
Выводы
Утилита speedtest-cli очень проста в использовании и в то же время может оказаться очень полезной. Во всяком случае теперь вы знаете как выполняется проверка скорости интернета linux. Если у вас остались вопросы, спрашивайте в комментариях!
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.