QGET - это лицензированная библиотека Apache2, написанная на Python, для того, чтобы загрузить веб -ресурсы асинхронным образом как можно быстрее.
Под капюшоном он получает выгоду от asyncio и aiohttp для создания нескольких одновременных соединений с ресурсом и загрузки его с помощью файлов буферированных деталей.
Оглавление
wget vs qgettqdm )chunk_bytes и max_part_mbasyncio от qget_coro COROUTINEwget vs qget Рассмотрим простой фрагмент конфигурации nginx , как это:
http {
server {
...
limit_rate 5m ;
...
}
} Теперь давайте сравним статистику загрузки для wget и qget для 1000 МБ файла и конфигурации, упомянутой выше:
| Приложение | Общее время [s] | AVG SPEED [MB/S] | Подробности |
|---|---|---|---|
wget | 251.34 | 3.98 | |
qget | 16.00 | 95,97 | Тест лимита подключения: 5,00 с Скачать: 10.42s Переписывание деталей: 0,58 с |
Заключение :
Для простого ограничения скорости ( на подключение ) qget позволяет достигать несколько раз более быстрой скорости загрузки на основе скорости подключения пользователя в Интернете, количества одновременных запросов и конфигурации сервера ресурсов. В примере выше qget достиг более 24 -кратной скорости загрузки wget .
Для более сложных случаев ( например, ограничение подключений на IP ) был создан автоматический тест измерения лимита подключения, чтобы вычислить, сколько одновременных запросов можно было бы получить, прежде чем сервер отклонится от следующего.
Вы можете скачать выбранные двоичные файлы из выпусков. Доступные версии:
Для установки qget модуль, просто:
$ pip install qgetУбедитесь, что Anaconda установлена.
Чтобы построить Windows (в приглашении Anaconda):
$ build.bat Чтобы построить POSIX (требуются пакеты libc-bin и binutils ):
$ build.shФункциональные аргументы:
URL (STR): URL -адрес загрузить ресурс.
FilePath (str, необязательный): выходной путь для загруженного ресурса.
Если не установить, это указывает на текущий рабочий каталог и имя файла из URL. По умолчанию никто.
переопределить (bool, необязательно): флаг, если существующий выходной файл следует переопределить. По умолчанию ложно.
auth (str, необязательно): строка пользователя: пара паролей для SSL Connection. По умолчанию никто.
verify_ssl (bool, kpintal): флаг, если следует выполнить проверку сертификата SSL. По умолчанию к истинному.
mock_browser (bool, необязательно): флаг, если заголовок пользователя-агента следует добавить в запрос. По умолчанию к истинному.
Строка пользователя-агента по умолчанию: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebkit/537.36
(Khtml, как гекко) Chrome/101.0.4951.67 Safari/537.36 '
proxy_url (str, необязательно): http/socks4/socks5 proxy url в формате 'Protocol: // user: password@ip: порт'.
По умолчанию никто.
Заголовки: (DICT [STR, STR], необязательно): пользовательские заголовки, которые будут отправлены. По умолчанию никто.
Если пользователь может указать собственную пользовательскую агенту и принять заголовки, в противном случае будут использоваться дефолты.
Progress_ref (ProgressState, необязательно): ссылка на состояние прогресса.
В случае принятия всех частей байты и статус перезаписывания будут обновлены в нем. По умолчанию никто.
max_connections (int, необязательно): максимальное количество асинхронных HTTP -соединений. По умолчанию до 50.
connection_test_sec (int, необязательно): максимальное время за секунды, назначенное тестированию
Сколько асинхронных соединений могут быть достигнуты для URL.
Если установлен на 0 тест будет опущен. По умолчанию 5.
chunk_bytes (int, необязательно): кусок данных, прочитанный в итерации из URL и сохранен в файл части в байтах.
Будет использоваться также при переписке деталей в выводный файл. Если ограничен поставлен, это может быть переопределено для
итерация потока. По умолчанию до 2621440.
max_part_mb (float, необязательно): желательный (если возможно) максимальный размер части в мегабайтах. По умолчанию 5.
RETRIES (int, необязательно): повторный номер для загрузки детали. По умолчанию до 10.
retry_sec (int, необязательно): время, чтобы подождать между поисками детали в секундах. По умолчанию 1.
Limit (str, необязательно): предел скорости загрузки в MBPS. Может поставляться с единицей в качестве «NUNIT», например. "5M".
Допустимые единицы (нечувствительный случай): B, K, M, G, KB, MB, GB. 0 байтов будут рассматриваться как без ограничения.
По умолчанию никто.
TMP_DIR (str, необязательно): путь временного каталога. Если не установить, это указывает на каталог OS TMP.
По умолчанию никто.
Debug (Bool, необязательно): флаг отладки. По умолчанию ложно.
Для использования в коде просто импортируйте функцию модуля:
from qget import qget
url = "https://speed.hetzner.de/100MB.bin"
qget ( url ) Использовать в коде с собственным циклом и asyncio :
import asyncio
from qget import qget_coro
async def main ( loop ):
url = "https://speed.hetzner.de/100MB.bin"
download_task = loop . create_task ( qget_coro ( url ))
await download_task
# Or just
# await qget_coro(url)
loop = asyncio . get_event_loop ()
loop . run_until_complete ( main ( loop ))
loop . close () Использование для крючков для прогресса (по умолчанию крючки используются для отображения панели прогресса tqdm ):
from qget import ProgressState , qget
def print_download_progress ( progress : ProgressState ) -> None :
print ( f"Download: { progress . get_download_progress ():.2f } %" , end = " r " )
if progress . get_download_bytes () == progress . total_bytes :
print ()
def print_rewrite_progress ( progress : ProgressState ) -> None :
print ( f"Rewrite: { progress . get_rewrite_progress ():.2f } %" , end = " r " )
if progress . rewrite_bytes == progress . total_bytes :
print ()
url = "https://speed.hetzner.de/100MB.bin"
progress = ProgressState (
on_download_progress = print_download_progress ,
on_rewrite_progress = print_rewrite_progress
)
qget ( url , progress_ref = progress ) Использование: QGET [-H] [-o filePath] [-f] [-a auth] [--no-verify] [------
[-proxy proxy_url] [-h Header] [-c max_connections]
[-test connection_test_sec] [-bytes chunk_bytes] [-part max_part_mb]
[-retries relies] [-retry_sec retry_sec] [-limit limit] [-tmp tmp_dir]
[-debug] [-v]
URL
Загрузка ресурса с заданного URL в буферных деталях с использованием асинхронных HTTP -соединений
с сеансом Aiohttp.
позиционные аргументы:
URL URL ресурса
параметры:
-h, -help показывать это сообщение справки и выход
-О FilePath, - -вывод FilePath
Выходной путь для загруженного ресурса.
-f, -Силы переопределения сил для вывода.
-А auth, -Auth Auth String of User: Пара паролей для SSL Connection.
-НЕ-ВЕРИФИФИКАЯ ОТКРЫТИЯ ВАЛИТАЦИЯ СЕРТИКА СЕРТИКА SSL.
-Нет-мак отключает заголовок пользователя-агента по умолчанию.
-Прокс Proxy_url http/socks4/socks5 proxy url в формате
'Protocol: // пользователь: пароль@ip: порт'.
-H заголовок, заголовок заголовка
Пользовательский заголовок в формате «Имя: значение». Может быть предоставлен несколько
раз.
-c max_connections, -connections max_connections
Максимальное количество асинхронных HTTP -соединений.
-test connection_test_sec
Максимальное время за секунды, назначенное для проверки, сколько асинхронно
Соединения могут быть достигнуты с URL. Используйте 0, чтобы пропустить.
-bytes Chunk_bytes Chunk данных, прочитанные в итерации из URL и сохранить в файл части в
байты. Будет использоваться также при переписке деталей в выводный файл.
-Парт max_part_mb желательный (если возможно) максимальный размер детали в мегабайтах.
-retries relies relies номер для загрузки детали.
-retry_sec retry_sec Время ждать между поисками детали в секундах.
-ограничить ограничение загрузки в MBPS. Может быть поставлен с устройством как «NUNIT»,
например. '5M'. Допустимые единицы (нечувствительный случай): B, K, M, G, KB, MB, GB.
0 байтов будут рассматриваться как без ограничения.
-TMP TMP_DIR Временный путь каталога. Если не установить, указывает на OS TMP
каталог.
-Флаг отладки декабала.
-v, -Версия отображает фактическую версию QGET.
Можно использовать также из модуля Python с теми же аргументами, что и для двоичного файла:
python -m qget https://speed.hetzner.de/100MB.binНесколько заголовков могут быть предоставлены следующим образом:
python -m qget -H ' name1:value1 ' -H ' name2:value2 ' https://speed.hetzner.de/100MB.bin Limiter пытается снизить скорость загруженных байтов, добавив паузы между итерацией по сравнению с контентом ресурсов. Если запрошен очень низкий уровень загрузки, попробуйте снизить количество соединений ( max_connections или --connections MAX_CONNECTIONS ), чтобы достичь лучшей точности для ограничения.
Размер детали рассчитывается во время выполнения на основе размера ресурса в байтах и максимального количества асинхронных соединений, установленных пользователем (или тестом подключения). Максимальный размер детали Param ( max_part_mb или --part MAX_PART_MB ) Поставляется пользователем, используется в качестве верхнего предела для рассчитанного значения.
part_bytes = min (resource_bytes/connections, max_part_bytes)