최대한 빨리 작은 페이지를 많이 다운로드해야합니다. 한 페이지의 평균 크기는 3kb입니다. 수백만 페이지가 있습니다. 첫째, 나는 시도했다. curl
하지만 서버가 요청에 응답하기를 기다리고 있었기 때문에 아마 느려졌습니다. 그런 다음 다음 페이지에 대해 동일한 프로세스를 실행하십시오.
curl -O "http://website.com/pages/[0000001-1000000].html"
편집 : 몇 가지 테스트를 한 후에, 나는이 결과를 관찰했다. 나는 항상 더 많은 제안에 열려 있습니다. 나는 속도를 더 향상시키고 싶다.
비교 1 : (dns 대 DNS 없음)
느린 :
curl -O "http://website.com/pages/[1-1000].html" -s -S
더 빠름 :
curl -O "http://90.111.123.222/pages/[1-1000].html" -s -S
작은 페이지를 많이 다운로드 할 때 DNS 지연이 중요합니다.
비교 2 : (컬 시퀀스 대 “연속”사용)
느린 :
curl -O "http://90.111.123.222/pages/{1}.html" -s -S ::: $(seq 1 1000)
더 빠름 :
curl -O "http://90.111.123.222/pages/[1-1000].html" -s -S
비교 3 : (병렬 실행)
느린 :
time parallel -j 5 curl -O \'"http://90.111.123.222/pages/{1}.html"\'
-S -s ::: $(seq 1 1000)
더 빠름 :
( time curl -O "http://90.111.123.222/pages/[1-200].html" -s -S &
time curl -O "http://90.111.123.222/pages/[201-400].html" -s -S &
time curl -O "http://90.111.123.222/pages/[401-600].html" -s -S &
time curl -O "http://90.111.123.222/pages/[601-800].html" -s -S &
time curl -O "http://90.111.123.222/pages/[801-1000].html" -s -S & )
Btw, 분명히 더 많은 인스턴스를 실행하면 두 가지 방법의 속도가 어느 정도 향상됩니다.
답변
작업을 여러 개의 작은 작업으로 분할하여 속도를 높이십시오. 예를 들어, 10 개의 컬링 프로세스를 생성하고 배경을 처리 할 수 있습니다.
curl -O "http://website.com/pages/0[000000-999999].html" &
curl -O "http://website.com/pages/1[000000-999999].html" &
curl -O "http://website.com/pages/2[000000-999999].html" &
...
등등.
그러나 더 똑똑하고 유연한 솔루션은 GNU 병렬 여러 파일을 병렬로 다운로드 할 수 있으며 작업 배포를 병렬 처리 할 수 있습니다.
선택의 당신의 포장 매니저와 그것을 설치하십시오 그 때 간단하게 무언가 일 것입니다
parallel -j 10 curl -O "http://website.com/pages/{1}" ::: $(seq -w 1000000)
훨씬 더 우아합니다.
답변
GNU 병렬 다운로드 및 사용법 배우기
https://www.gnu.org/software/parallel/
단일 행 명령을 사용하면 웹 페이지를 다운로드하는 것뿐만 아니라 곧 병렬로 실행하게됩니다.