QGet 은 Python으로 작성된 APACHE2 라이센스 라이브러리로서 가능한 빨리 비동기 방식으로 웹 리소스를 다운로드하기 위해 작성되었습니다.
후드에서는 asyncio 및 aiohttp 의 이점이있어 리소스에 대한 여러 개의 동시 연결을 생성하고 버퍼링 된 부품 파일을 사용하여 다운로드합니다.
목차
wget vs qgettqdm 사용한 기본적으로)chunk_bytes 및 max_part_mb 로 RAM 사용 제한 지원qget_coro coroutine의 asyncio 에서 자체 이벤트 루프 사용 지원wget vs qget 다음과 같은 간단한 nginx 구성 조각을 고려하십시오.
http {
server {
...
limit_rate 5m ;
...
}
} 이제 1000MB 파일에 대한 wget 및 qget 의 다운로드 통계와 위에서 언급 한 구성을 비교해 봅시다.
| 애플리케이션 | 총 시간 [s] | AVG 속도 [MB/S] | 세부 |
|---|---|---|---|
wget | 251.34 | 3.98 | |
qget | 16.00 | 95.97 | 연결 제한 테스트 : 5.00s 다운로드 : 10.42s 부품 재 작성 : 0.58s |
결론 :
간단한 속도 제한 ( 연결 당 )의 경우 qget 사용하면 사용자 인터넷 연결 속도, 동시 요청 수 및 리소스 서버 구성에 따라 여러 번 빠른 다운로드 속도를 달성 할 수 있습니다. 위의 예에서 qget 24 배 이상의 wget 속도를 달성했습니다.
보다 복잡한 경우 ( 예 : IP 당 연결 제한 ) 자동 연결 제한 측정 테스트가 작성하여 서버가 다음을 거부하기 전에 달성 할 수있는 동시 요청 수를 계산하기 위해 작성되었습니다.
릴리스에서 선택한 이진 파일을 다운로드 할 수 있습니다. 사용 가능한 버전 :
qget 모듈을 설치하려면 간단히
$ pip install qgetAnaconda가 설치되어 있는지 확인하십시오.
Windows를 구축하려면 (Anaconda 프롬프트에서) :
$ build.bat POSIX ( libc-bin 및 binutils 패키지가 필요합니다)를 구축하려면 :
$ build.sh기능 인수 :
URL (str) : 리소스를 다운로드하려는 URL.
FilePath (STR, 선택 사항) : 다운로드 된 리소스의 출력 경로.
설정하지 않으면 현재 작업 디렉토리와 URL의 파일 이름을 가리 킵니다. 기본값은 없습니다.
재정의 (bool, 선택 사항) : 기존 출력 파일을 재정의 해야하는 경우 플래그. 기본값으로 거짓.
Auth (str, 선택 사항) : ssl 연결을위한 비밀번호 쌍의 사용자 문자열. 기본값은 없습니다.
verify_ssl (bool, 선택 사항) : 플래그 SSL 인증서 유효성 검증을 수행 해야하는 경우 플래그. 기본값은 참으로.
mock_browser (bool, 선택 사항) : 사용자 에이전트 헤더를 추가 해야하는 경우 플래그를 요청합니다. 기본값은 참으로.
기본 사용자 에이전트 문자열 : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebkit/537.36
(khtml, Gecko와 같은) Chrome/101.0.4951.67 Safari/537.36 '
proxy_url (str, 옵션) : http/socks4/socks5 proxy url 'protocol : // user : password@ip : port'.
기본값은 없습니다.
헤더 : (dict [str, str], 선택 사항) : 보낼 사용자 정의 헤더. 기본값이 없습니다.
SET 사용자가 자체 사용자 에이전트를 지정하고 헤더를 수락 할 수있는 경우, 그렇지 않으면 기본값이 사용됩니다.
Progress_Ref (ProgressState, 선택 사항) : 진행 상태에 대한 참조.
모든 부품 바이트 바이트 및 다시 쓰기 상태가 업데이트됩니다. 기본값은 없습니다.
max_connections (int, 옵션) : 최대 비동기 HTTP 연결량. 기본값은 50입니다.
connection_test_sec (int, 옵션) : 테스트에 할당 된 초의 최대 시간
URL에 얼마나 많은 비동기 연결을 달성 할 수 있는지.
0으로 설정하면 테스트가 생략됩니다. 기본값은 5까지.
chunk_bytes (int, 옵션) : URL에서 반복을 읽고 바이트의 부품 파일에 저장하는 데이터 청크.
파일을 출력으로 다시 작성할 때도 사용됩니다. 제한이 제공되면이를 재정의 할 수 있습니다
스트림 반복. 기본값은 2621440입니다.
max_part_mb (float, 옵션) : megabytes에서 가장 바람직한 (가능한 경우) 최대 부품 크기. 기본값은 5까지.
리트리 (int, 옵션) : 부품 다운로드를위한 리트리 번호. 기본값은 10까지.
retry_sec (int, 옵션) : 몇 초 만에 부품 다운로드 사이에서 기다리는 시간. 기본값은 1입니다.
한계 (STR, 선택 사항) : MBPS의 다운로드 속도 제한. "Nunit"으로 단위와 함께 제공 될 수 있습니다. "5m".
유효한 단위 (Case Insensitive) : B, K, M, G, KB, MB, GB. 0 바이트는 제한이없는 것으로 처리됩니다.
기본값은 없습니다.
TMP_DIR (str, 선택 사항) : 임시 디렉토리 경로. 설정하지 않으면 OS TMP 디렉토리를 가리 킵니다.
기본값은 없습니다.
디버그 (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-mock]
[-proxy proxy_url] [-h 헤더] [-c max_connection]
[-test connection_test_sec] [--Bytes chunk_bytes] [-파트 max_part_mb]
[-Retries Retries] [--retry_sec retry_sec] [-limit 한계] [-tmp tmp_dir]
[-Debug] [-v]
URL
비동기 HTTP 연결을 사용하여 버퍼링 된 부품의 주어진 URL에서 자원을 다운로드합니다.
AIOHTTP 세션.
위치 논쟁 :
리소스의 URL
옵션 :
-h, -help이 도움말 메시지와 종료를 보여줍니다
-O FilePath, -출력 파일 패스
다운로드 된 리소스의 출력 경로.
-f, -포스 파일 파일 출력에 대한 재정의.
-Auth, -Auth Auth String : SSL 연결 용 비밀번호 쌍.
-NOVERIFY SSL 인증서 유효성 검사를 비활성화합니다.
-노동은 기본 사용자 에이전트 헤더를 비활성화합니다.
-proxy proxy_url http/socks4/socks5 프록시 URL 형식
'프로토콜 : // user : password@ip : port'.
-H 헤더, -헤더 헤더
형식 '이름 : value'의 사용자 정의 헤더. 다중 공급 할 수 있습니다
타임스.
-C max_connections, -연결 max_connections
비동기식 HTTP 연결의 최대량.
-test connection_test_sec
비동기식의 양을 테스트하기 위해 할당 된 최대 시간
연결을 URL로 달성 할 수 있습니다. 0을 사용하여 건너 뛰십시오.
-BYTES chunk_bytes 데이터 청크 URL에서 반복하여 읽고 부품 파일에 저장
바이트. 파일을 출력으로 다시 작성할 때도 사용됩니다.
-파트 max_part_mb 바람직한 (가능한 경우) megabytes의 최대 부품 크기.
-부품 다운로드를위한-레트리 리트리 리트리 번호.
--retry_sec retry_sec 부품의 재정을 몇 초 만에 기다리는 시간.
-MBPS의 LIMIT 제한 다운로드 비율 제한. 단위로 'nunit'으로 제공 될 수 있습니다.
예를 들어. '5m'. 유효한 단위 (Case Insensitive) : B, K, M, G, KB, MB, GB.
0 바이트는 제한이없는 것으로 처리됩니다.
--tmp tmp_dir 임시 디렉토리 경로. 설정하지 않으면 OS TMP를 가리 킵니다
예배 규칙서.
-Debug 디버그 플래그.
-v, -Version은 실제 버전의 QGet을 표시합니다.
이진과 동일한 인수를 가진 파이썬 모듈에서도 사용할 수 있습니다.
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 )을 낮추십시오.
부품 크기는 바이트의 리소스 크기와 사용자가 설정 한 최대 비동기 연결 (또는 연결 테스트)을 기준으로 런타임으로 계산됩니다. MAX PART SIZE PARAM ( max_part_mb 또는 --part MAX_PART_MB )은 계산 된 값의 최고 한계로 사용됩니다.
part_bytes = min (resource_bytes/connections, max_part_bytes)