Skip to main content

Async client that allows you to measure internet speed based on Yandex Internetometer

Project description

yaspeedtest

YaSpeedTest — это асинхронный клиент Python, который точно измеряет скорость интернета, используя те же общедоступные конечные точки, что и официальный Yandex Internet Speed ​​Test.

License PyPI Version PyPI - Downloads 🧪 Run Tests

preview

[!WARNING]
Данная библиотека НЕ является официальной, и не пытается ей казаться. Данная библиотека разрабатывается исключительно в личных интересах, и использует только общедоступные endpoint'ы.

Возможности

  • Асинхронная архитектура (asyncio, aiohttp)
  • Поддержка пикового измерения скорости (реальные пиковые Mbps, как в браузере)
  • Умное использование проб (probes) с серверов Яндекса
  • Полная типизация (через pydantic)
  • Поддержка измерений Download, Upload, Latency
  • Совместимость с Python 3.11+
  • Возможность интеграции в любые системы мониторинга или DevOps пайплайны

Установка

Установите библиотеку с помощью pip:

pip install yaspeedtest

Или скачайте последнюю версию из репозитория:

git clone https://github.com/ErilovNikita/yaspeedtest
cd yaspeedtest

Пример использования

import asyncio
from yaspeedtest.client import YaSpeedTest

async def main():
    ya = await YaSpeedTest.create()
    result = await ya.run()

    print(f"Ping: {result.ping_ms:.2f} ms")
    print(f"Download: {result.download_mbps:.2f} Mbps")
    print(f"Upload: {result.upload_mbps:.2f} Mbps")

asyncio.run(main())

# Ping: 1.84 ms
# Download: 939.17 Mbps
# Upload: 870.29 Mbps

Больше примеров в папке examples

Режим пикового измерения скорости

Методы measure_download_peak() и measure_upload_peak() фиксируют пиковую скорость передачи данных за секунду, а не усреднённое значение по всему файлу.

Это позволяет получить результаты, максимально близкие к официальному тесту Яндекса, где скорость отображается на основе коротких всплесков трафика.

Как это работает

  1. Клиент делает запрос к Яндекс
  2. Сервер возвращает набор доступных probe-серверов (latency, download, upload)
  3. Для каждого типа выполняются асинхронные измерения:
    • Latency — последовательные пинги к малым ресурсам (latency probes)
    • Download — скачивание файлов
    • Upload — отправка данных
  4. Результаты агрегируются в объект SpeedResult, содержащий:
    • Минимальный пинг
    • Пиковую скорость загрузки
    • Пиковую скорость отдачи

Струкрура

Класс YaSpeedTest

Метод Описание
run() Основной метод запуска теста скорости
measure_latency(url: str, timeout: int) Измеряет пинг в миллисекундах
measure_download(url: str, timeout: int) Классическое измерение скорости загрузки
measure_download_peak(url: str, timeout: int) Измеряет пиковую скорость загрузки
measure_upload(url: str, size: int, timeout: int) Классическое измерение скорости отдачи
measure_upload_peak(url: str, size: int, timeout: int) Измеряет пиковую скорость отдачи

Класс SpeedResult

Поле Тип Описание
ping_ms float Средний пинг в миллисекундах
download_mbps float Скорость загрузки в мегабитах в секунду
upload_mbps float Скорость отдачи в мегабитах в секунду

Пример результата SpeedResult:

SpeedResult(
    ping_ms=1.37,
    download_mbps=950.42,
    upload_mbps=870.10
)

Советы по производительности

  • Избегайте слишком большого числа одновременных проб — оптимально 3–5 в каждой категории.
  • Устанавливайте timeout не менее 30 секунд для стабильных замеров.
  • Используйте aiohttp.TCPConnector(limit_per_host=2) для балансировки нагрузки.
  • На системах с нестабильным NAT возможно повышение пинга из-за соединений TLS.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yaspeedtest-0.1.1.tar.gz (17.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yaspeedtest-0.1.1-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

Details for the file yaspeedtest-0.1.1.tar.gz.

File metadata

  • Download URL: yaspeedtest-0.1.1.tar.gz
  • Upload date:
  • Size: 17.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for yaspeedtest-0.1.1.tar.gz
Algorithm Hash digest
SHA256 36346f930886d935b4a67e4a802d55c4644f831c1c7cf2e3228e3647e3d2d1d8
MD5 176cd2b10dbb5642a785fc79edf94c90
BLAKE2b-256 059580d91036c6e90f7ef7ae707647d986f0740c25dccbcf6761ab741e47423c

See more details on using hashes here.

Provenance

The following attestation bundles were made for yaspeedtest-0.1.1.tar.gz:

Publisher: publish-pypi.yml on ErilovNikita/yaspeedtest

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file yaspeedtest-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: yaspeedtest-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for yaspeedtest-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 41055e54534ff3c2b8b44ed1a5fbf8024b70043c2d331b55a7d8dd3840a015f9
MD5 406528202532a3c414d403c61c52694e
BLAKE2b-256 73508698e7b3da0bc01d0d36323602eeacbde41f679f3000434835be80dd043f

See more details on using hashes here.

Provenance

The following attestation bundles were made for yaspeedtest-0.1.1-py3-none-any.whl:

Publisher: publish-pypi.yml on ErilovNikita/yaspeedtest

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page