Python: как проверить скорость Интернета
Возможно, вы уже пользовались сайтом speedtest раньше, но знаете ли вы, что в speedtest есть библиотека Python.
В этом руководстве мы научимся использовать библиотеку Speedtest для проверки скорости вашего интернета. Мы также узнаем, как использовать командные строки speedtest. Давайте начнем.
Установка Speedtest
Чтобы установить speedtest через pip, выполните следующую команду:
pip install speedtest-cliТест скорости интернета (скрипт)
После установки пакета speedtest. Теперь давайте посмотрим, как использовать его с кодом. В следующем коде я проверю скорость загрузки в Интернете.
import speedtest # Speed test st = speedtest.Speedtest() # Download Speed ds = st.download() print(ds)Позвольте мне объяснить.
Сначала мы импортируем пакет speedtest. Затем вызывается класс Speedtest() . Затем проверьте мою скорость загрузки с помощью метода download() . Наконец, распечатайте результат. Вывод:3422459.073187817Как видите, скорость интернета выражена в байтах . Чтобы сделать его читабельным, мы воспользуемся следующей функцией.
def humansize(nbytes): suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'] i = 0 while nbytes >= 1024 and i < len(suffixes)-1: nbytes /= 1024. i += 1 f = ('%.2f' % nbytes).rstrip('0').rstrip('.') return '%s %s' % (f, suffixes[i]) #Readable print(humansize(ds))3.56 MBТеперь давайте проверим скорость загрузки с помощью метода upload() .
import speedtest # Speed test st = speedtest.Speedtest() # Upload speed us = st.upload() print(us) #Readable print(humansize(us))386382.6586620888 301.51 KBКомандные строки Speedtest
Speedtest также предоставляет командные строки для проверки скорости нашего интернета.
Использование:
Команда помощи:
speedtest-cli -husage: speedtest-cli [-h] [--no-download] [--no-upload] [--single] [--bytes] [--share] [--simple] [--csv] [--csv-delimiter CSV_DELIMITER] [--csv-header] [--json] [--list] [--server SERVER] [--exclude EXCLUDE] [--mini MINI] [--source SOURCE] [--timeout TIMEOUT] [--secure] [--no-pre-allocate] [--version] Command line interface for testing internet bandwidth using speedtest.net.Проверить скорость интернета:
speedtest-cliRetrieving speedtest.net configuration. Testing from xxx Telecom (196.89.30.99). Retrieving speedtest.net server list. Selecting best server based on ping. Hosted by xxx Telecom (xxx) [394.57 km]: 29.1 ms Testing download speed. Download: 8.30 Mbit/s Testing upload speed. Upload: 10.33 Mbit/sЭта команда выше проверяет ping , скорость загрузки и скорость скачивания . Проверить скорость интернета: по ссылке для обмена:
speedtest-cli --shareRetrieving speedtest.net configuration. Testing from xxx Telecom (196.89.30.99). Retrieving speedtest.net server list. Selecting best server based on ping. Hosted by xxx Telecom (xxx) [394.57 km]: 28.131 ms Testing download speed. Download: 3.74 Mbit/s Testing upload speed. Upload: 0.39 Mbit/s Share results: http://www.speedtest.net/result/12339819892.png
Как видите, у нас есть URL результатов. Откроем его в браузере. Результат: Надеемся, это легко понять. До скорого.
Использованная литература:
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
По статье задано0 вопрос(ов)
Подписка на обсуждение 1
Подписка на раздел 73Вам это нравится? Поделитесь в социальных сетях!
Тест скорости интернета в Linux
Данная статья поможет Вам узнать, как можно измерить скорость интернета на сервере с Linux системой. В данном случае мы рекомендуем использовать утилиту speedtest-cli. Вы можете напрямую установить пакет phython speedtest на свой дистрибутив Linux, а затем запустить тест через команду в терминале.
Мы расскажем Вам как это сделать шаг за шагом, используя приведенную ниже инструкцию.
Что такое speedtest-cli?
Утилита speedtest-cli — это скрипт, который написан на Python. Он измеряет скорость интернет-трафика в двух направлениях (Upload/Download) используя инфраструктуру speedtest.net для измерения скорости. Для данной программы необходимо установить Python 2.4-3.4 или выше.
Данная сервисная программа позволит узнать скорость сервера (загрузки и выгрузки) с разных точек мира.
Установка EPEL
EPEL (Extra Packages for Enterprise Linux) — это основанный сообществом открытый и бесплатный проект репозитория предоставляемый командой Fedora, который содержит высококачественные пакеты дополнительного программного обеспечения для Linux дистрибутивов.
Установка Pyhton и pyhthon-pip
Под модулем в Python понимается файл с расширением .py. Модули предназначены для того, чтобы в них хранить часто используемые функции, классы, константы и т.п. Можно условно разделить модули и программы: программы предназначены для непосредственного запуска, а модули для импортирования их в другие программы. Стоит заметить, что модули могут быть написаны не только на языке Python, но и на других языках.
pip — система управления пакетами, которая используется для установки и управления программными пакетами написанными на Python. Большинство дистрибутивов Python уже содержат pip. Если pip отсутствует, то его можно установить при помощи системы управления пакетами.
Примеры Linux систем
Установка утилиты на примере различных ОС
Centos:
Установка EPEL release :
yum install epel-release -y
Установка python и python-pip :
yum install python python-pip -y
Установка Speedtest-cli пакета с помощью pip :
pip install –upgrade pip
Debian/Ubuntu:
Для начала обновите все пакеты:
Установка python и python-pip :
apt install python python-pip -y
pip install –upgrade pip
Установка Speedtest-cli пакет с помощью pip :
apt-get install speedtest-cli
FreeBSD:
Установка python :
pkg install python
Скачайтефайл speedtest-cli.py:
wget –no-check-certificate -O speedtest-cli
Назначте необходимые права на скаченный файл:
chmod 777 speedtest-cli
Запустите скрипт для проверки скорости интернета:
Установка и пользование утилиты Speedtest-cli
Для установке используйте pip команду:
pip install speedtest-cli
Для того чтобы выбрать локацию сервера для проверки используйте команду:
Для подробной инструкции по использованию данной утилиты вы можите найти, введя следующую команду:
Каждый сервер проверок обладает собственным уникальным ID, например:
2113) Gatchina-Online (Gatchina, Russian Federation) [305.32 km]
Для того чтобы использовать этот сервер для проверки используйте команду:
speedtest-cli –server 2113
Разумеется данные команды нужно выполнять в консоли сервера или используя SSH.
Заключение
Независимо от того, какой тип сервера вы используете – Облачный KVM или Выделенный Сервер, тестирование скорости интернета поможет определить, насколько быстро сервер может обрабатывать запросы и какой уровень производительности можно ожидать. Правильный выбор инструментов и технологий может помочь вам достичь ваших бизнес-целей и повысить производительность вашей инфраструктуры.
Проверка скорости интернета библиотекой Requests в мультипроцессинге
Сегодня речь пойдет о том, как из идеи по замеру скорости, был создан скрипт для загрузки файла изображения и отправки его же обратно на сервер, с расчетом времени выполнения каждой из функций и вычисления скорости.
Начну со списка используемых библиотек:
- import os
- from multiprocessing import Pool
- import time
- import pandas as pd
- import requests
server_list = [ < 'server_id': 3682, 'download': 'http://moscow.speedtest.rt.ru:8080/speedtest/random7000x7000.jpg', 'upload': 'http://moscow.speedtest.rt.ru:8080/speedtest/upload.php' >]
Пишем первую функцию:
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 запроса
Как измерить скорость канала сервера или VPS
Скорость сетевого подключения сервера к каналам связи оказывает прямое влияние на быстродействие сайта. Как измерить скорость подключения VPS к интернету? Есть простой способ.
Зачем измерять скорость сетевого подключения
Зачастую хостеры экономят на оборудовании, вроде бы покупаешь нормальную конфигурацию сервера - и диск быстрый, и процессоры мощные и сервер в крупном дата-центре в столице. А сайт еле шевелится. И вот толпы разработчиков оптимизируют его под Яндекс, под Google PageSpeed Insights, снова и снова настраивают сервер. А скорость не растет, сайт ползает.
И в последнюю очередь в голову приходит мысль о том, что не мешало бы проверить с какой скоростью наш сайт подключен к внешним каналам Интернета. Если на ваш VPS выделяется полоса пропускания в 100 Мбит/сек, то вряд ли он будет быстр и весел под нагрузкой. В среднем он сможет быстро отдать контент 3 посетителям одновременно, четвертый уже будет ждать освобождения полосы пропускания.
Способы измерения скорости сети
Утилита wget
С давних времен известен простой способ скачивания 100 Мб файла с соседнего сервера утилитой wget. Но сегодня это не модно, да и скорость будет ограничена характеристиками соседнего сервера.
Сервис SpeedTest.net
Будем использовать консольную утилиту speedtest-cli. Это клиент SpeedTest.net на Python, он может измерять скорость интернета на сервере как на прием, так и на передачу. Можно измерить скорость до конкретного узла или поделиться результатом через интернет.
Установка speedtest-cli
Для начала надо установить сам Python:
Исходный код:
yum -y install python
Затем придется скачать сам клиент и предоставить файлу права на исполнение:
Исходный код:
cd ~ wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py chmod +x speedtest-cli
Теперь можно запустить клиента командой:
Исходный код:
./speedtest-cli
Вывод утилиты speedtest-cli
Опции speedtest-cli
По умолчанию скорость показана в битах. Вы можете посмотреть результат выполнения в байтах, для этого есть специальный ключ --bytes. Вот так его можно использовать:
Исходный код:
./speedtest-cli --bytes
Можно использовать несколько ключей одновременно, просто пропишите их все в команде. Вот несколько полезных ключей с пояснениями:
Исходный код:
./speedtest-cli --simple #короткий вывод, только пинг и скорость ./speedtest-cli --share #ссылка на результат измерений ./speedtest-cli --list #список серверов ./speedtest-cli --version #вывод версии утилиты ./speedtest-cli --help #вывод помощи
Короткий вывод утилиты speedtest-cli
Результат выполнения с ключом --share
Выбор сервера speedtest
По-умолчанию, утилита находит ближайший узел и замеряет скорость с его помощью, но вы можете изменить это поведение. Для начала нам нужно узнать ID интересующих нас узлов. Например, если нам нужны узлы в Москве, то можем отфильтровать узлы с помощью grep:
Исходный код:
./speedtest-cli --list | grep Moscow
А можем скачать список всех узлов с сайта speedtest.net утилитой wget:
Исходный код:
wget http://www.speedtest.net/speedtest-servers.php
Узнаем нужный ID и проверяем скорость соединения с этим узлом:
Исходный код:
./speedtest-cli --server 6827
Проверка скорости до конкретного узла
Для тестов мы использовали облачные серверы REG.RU и как видите, они показывают очень неплохую скорость. И это с учетом того, что тесты проводились на самом дешевом стандартном сервере. Для проектов на 1С-Битрикс мы рекомендуем облачные Высокочастотные серверы они реально быстрые, отзывчивые и удобные.