문제

Python에서 Amazon S3에서 많은 파일 (비교적 작은 10-50KB)을 얻는 가장 빠른 방법은 무엇입니까? (200,000 백만 파일의 순서로).

현재 Boto를 사용하여 서명 된 URL을 생성하고 PyCurl을 사용하여 파일을 하나씩 얻습니다.

어떤 유형의 동시성이 도움이 될까요? pycurl.curlmulti 객체?

나는 모든 제안에 열려 있습니다. 감사!

도움이 되었습니까?

해결책

Python의 경우 IO Bound이므로 여러 스레드가 CPU를 사용하지만 하나의 코어 만 사용할 것입니다. 여러 코어가 있다면 새로운 것을 고려하고 싶을 수도 있습니다. 다중 프로세서 기준 치수. 그럼에도 불구하고 각 프로세스가 여러 스레드를 사용하도록 할 수 있습니다. 프로세서와 스레드 수를 조정해야합니다.

여러 스레드를 사용하는 경우 이것은 좋은 후보입니다. 대기줄 수업.

다른 팁

나는 Python에 대해 아무것도 모르지만 일반적으로 작업을 작은 청크로 나누고 동시에 실행할 수 있도록하고 싶을 것입니다. 파일 유형 또는 알파벳순 또는 무언가로 분류 한 다음 해체의 각 부분에 대해 별도의 스크립트를 실행할 수 있습니다.

사용을 고려할 수 있습니다 S3FS, Python에서 동시 파일 시스템 명령을 실행합니다.

S3 작업을 위해 Twisted와 함께 TXAWS를 사용해 왔지만, 아마도 원하는 것은 인증 된 URL을 얻고 Twisted.Web.Client.DownloadPage를 사용하는 것입니다 (기본적으로 많은 상호 작용없이 스트림에서 파일로 행복하게 이동합니다).

Twisted는 원하는 동시성에서 쉽게 실행할 수있게합니다. 200,000의 순서대로, 아마도 발전기를 만들고 협력자를 사용하여 동시성을 설정하고 생성기가 필요한 모든 다운로드 요청을 생성하도록합니다.

Twisted에 익숙하지 않다면 모델이 익숙해지는 데 약간의 시간이 걸리지 만 그만한 가치가 있습니다. 이 경우 최소한의 CPU와 메모리 오버 헤드가 필요하지만 파일 설명자에 대해 걱정해야합니다. Perspective Broker를 혼합하고 더 많은 파일 설명자가 필요하거나 여러 연결이 필요한 경우 해 내려야 할 경우 여러 머신에 작업을 끊는 것은 매우 쉽습니다.

스레드 + 대기열은 어떻습니까? 나는이 기사를 좋아합니다. Python을 사용한 실제 스레드 프로그래밍

각 작업은 적절한 도구로 수행 할 수 있습니다 :)

스트레스 테스트 S3 :)에 Python을 사용하고 싶으므로 대량의 다운로더 프로그램을 찾아 링크를 전달하는 것이 좋습니다.

Windows에서는 Reget 프로그램 설치 경험이 있습니다 (Shareware, http://reget.com) 및 COM 인터페이스를 통해 다운로드 작업을 작성합니다.

물론 사용 가능한 인터페이스가있는 다른 프로그램이 존재할 수 있습니다.

문안 인사!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top