Проверить скорость работы программы python

Содержание

статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.

Асинхронный и синхронный анализ производительности Python

Введение Эта статья является второй частью серии статей об использовании Python для разработки асинхронных веб-приложений. В первой части более подробно рассматривается параллелизм в Python и asyncio, а также aiohttp. Если вы хотите узнать больше об асинхронном Python для веб-разработки [/ asynchronous-python-for-web-development /], у нас это есть. Из-за неблокирующей природы асинхронных библиотек, таких как aiohttp, мы надеемся, что сможем делать и обрабатывать больше запросов в

Время чтения: 8 мин.

Вступление

Эта статья является второй частью серии об использовании Python для разработки асинхронных веб-приложений. В первой части более подробно asyncio параллелизм в Python и asyncio, а также aiohttp .

Если вы хотите узнать больше об асинхронном Python для веб-разработки , у нас это есть.

Из-за неблокирующей природы асинхронных библиотек, таких как aiohttp мы надеемся, что сможем делать и обрабатывать больше запросов за заданный промежуток времени по сравнению с аналогичным синхронным кодом. Это связано с тем, что асинхронный код может быстро переключаться между контекстами, чтобы минимизировать время ожидания ввода-вывода.

Ты неправильно замеряешь время в Python! Или нет?

Клиентская и серверная производительность

Тестирование производительности асинхронной библиотеки, такой как aiohttp стороне клиента относительно несложно. Мы выбираем какой-либо веб-сайт в качестве ссылки, а затем делаем определенное количество запросов, определяя, сколько времени потребуется нашему коду для их выполнения. Мы рассмотрим относительную производительность aiohttp и requests при отправке запросов на https://example.com .

Читайте также:
Как устанавливать программы с кешем

Проверить производительность на стороне сервера немного сложнее. Такие библиотеки, как aiohttp поставляются со встроенными серверами разработки, которые подходят для тестирования маршрутов в локальной сети. Однако эти серверы разработки не подходят для развертывания приложений в общедоступной сети, поскольку они не могут справиться с нагрузкой, ожидаемой от общедоступного веб-сайта, и не подходят для обслуживания статических ресурсов, таких как Javascript, CSS и файлы изображений.

Чтобы получить лучшее представление об относительной производительности aiohttp и аналогичной синхронной веб-инфраструктуры, мы собираемся повторно реализовать наше веб-приложение с помощью Flask, а затем сравним серверы разработки и производства для обеих реализаций.

Для производственного сервера мы будем использовать Gunicorn .

На стороне клиента: aiohttp vs запросы

Для традиционного синхронного подхода мы просто используем простой цикл for Однако перед запуском кода обязательно установите модуль запросов :

$ pip install —user requests

Разобравшись с этим, давайте продолжим и реализуем это более традиционным способом:

# multiple_sync_requests.py import requests def main(): n_requests = 100 url = «https://example.com» session = requests.Session() for i in range(n_requests): print(f»making request to «) resp = session.get(url) if resp.status_code == 200: pass main()

Однако аналогичный асинхронный код немного сложнее. Выполнение нескольких запросов с помощью aiohttp использует asyncio.gather для одновременного выполнения запросов:

Расчёт времени выполнения программы на python #short


# multiple_async_requests.py import asyncio import aiohttp async def make_request(session, req_n): url = «https://example.com» print(f»making request to «) async with session.get(url) as resp: if resp.status == 200: await resp.text() async def main(): n_requests = 100 async with aiohttp.ClientSession() as session: await asyncio.gather( *[make_request(session, i) for i in range(n_requests)] ) loop = asyncio.get_event_loop() loop.run_until_complete(main())

Запуск синхронного и асинхронного кода с помощью утилиты bash time:

[email protected] :~$ time python multiple_sync_requests.py real 0m13.112s user 0m1.212s sys 0m0.053s [email protected] :~$ time python multiple_async_requests.py real 0m1.277s user 0m0.695s sys 0m0.054s

Параллельный / асинхронный код намного быстрее. Но что произойдет, если мы сделаем синхронный код многопоточным? Может ли он соответствовать скорости параллельного кода?

# multiple_sync_request_threaded.py import threading import argparse import requests def create_parser(): parser = argparse.ArgumentParser( description=»Specify the number of threads to use» ) parser.add_argument(«-nt», «—n_threads», default=1, type=int) return parser def make_requests(session, n, url, name=»»): for i in range(n): print(f»: making request to «) resp = session.get(url) if resp.status_code == 200: pass def main(): parsed = create_parser().parse_args() n_requests = 100 n_requests_per_thread = n_requests // parsed.n_threads url = «https://example.com» session = requests.Session() threads = [ threading.Thread( target=make_requests, args=(session, n_requests_per_thread, url, f»thread_») ) for i in range(parsed.n_threads) ] for t in threads: t.start() for t in threads: t.join() main()

Читайте также:
Программа русская классическая школа это

Выполнение этого довольно подробного фрагмента кода даст:

[email protected] :~$ time python multiple_sync_request_threaded.py -nt 10 real 0m2.170s user 0m0.942s sys 0m0.104s

И мы можем увеличить производительность, используя больше потоков, но отдача быстро уменьшается:

[email protected] :~$ time python multiple_sync_request_threaded.py -nt 20 real 0m1.714s user 0m1.126s sys 0m0.119s

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

Хотя он предлагает аналогичное время отклика, оно того не стоит из-за усложнения кода, который может быть простым — качество кода не увеличивается из-за сложности или количества строк, которые мы используем.

На стороне сервера: aiohttp против Flask

Проверка скорости заргрузки сайта используя Python

Проверка скорости заргрузки сайта используя Python

Скорость загрузки сайта является одним из осоновных показателей для продвижения сайта, это показал последний апдейт Google. Каждый SEO специалист проводя аудит сайта старается максимально увеличить скорость загрузки, но как проверить страницы на скорость загрузки, можно использовать сторонние сервисы платные или бесплатные но с ограниениями или же прибегнуть к более альтернативным методам.

Проверить скорость загрузки каждой страницы вручную, довольно трудоемкая и неблагодарная работа. Встречаются и те, кто проверяет скорость загрузки только главной). И даже проверив основные страницы на скорость загрузки, хочется время от времени контролировать данную статистику, так как возможно вляние многих факторов на скорость и разработчик может сделать минимальные правки кода, а скорость загрузки уменьшится в несколько раз. Но заметить это можно не сразу, что приведет к проседанию позиций.

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 -h
usage: 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-cli
Retrieving 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 —share
Retrieving 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

Speed Test Result

Как видите, у нас есть URL результатов. Откроем его в браузере. Результат: Надеемся, это легко понять. До скорого.

Использованная литература:

Рекомендуем хостинг TIMEWEB

Рекомендуем хостинг TIMEWEB

Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

По статье задано0 вопрос(ов)
Подписка на обсуждение 1
Подписка на раздел 72

Вам это нравится? Поделитесь в социальных сетях!

Источник: evileg.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru