2010-11-18 3 views
0

큰 원격 파일을 다운로드하기 위해 여러 스레드를 만들어야하는 프로젝트에서 작업하고 있습니다. 나는 이미 이것을했으나 단 하나의 쓰레드를 사용하는 것보다 여러 개의 쓰레드를 가진 파일을 다운로드하는데 더 오랜 시간이 걸린다. xampp localhost를 사용하여 시간 경과 테스트를 수행했습니다. 나는 실제 서버에서 다운로드를 시도하지 않았기 때문에 그것이 정상 동작인지 또는 알고 있는지 알고 싶습니다.Python/Urllib2/Threading : 단일 다운로드 스레드가 여러 다운로드 스레드보다 빠릅니다. 왜?

감사 케네디

+0

숫자를 입력하십시오. 한 번의 다운로드에는 얼마나 걸립니까? 2 회의 동시 다운로드는 2 배 이상 걸립니다. 3 번은 3 번 걸립니까? 너 무슨 소리 야? 보고있는 번호를 입력하십시오. 또한 멀티 스레드 코드의 가장 작은 코드 스 니펫을 제공하십시오. 당신이 잘못하고 있다는 작은 가능성이 있습니다. –

답변

4

9 여성들은 한 달 아기를 만들기 위해 결합 할 수 없습니다. 10 개 개의 스레드가있는 경우, 그들은 각각 10 % 단일 스레드의 대역폭을 가지고 있고, 컨텍스트 스위칭을위한 추가 오버 헤드 등

+0

감사합니다. 나는 그것을 지금 얻는다 – Kennedy

1

파이썬 스레딩 사용 뭔가 GIL (Golbal 통역 잠금)로 전화 언젠가 저하가 프로그램 실행 시간. 많은 이야기를하지 않고

여기 난 당신이 또한이 회의 herehere을 볼 수 있습니다, 당신은 thisthis 어쩌면 그것은 당신이 당신의 문제를 이해하는 데 도움이 될 수 있습니다 읽어 초대합니다. 이 :

+2

GIL은 I/O를 기다리는 동안 해방되어 GIL 별난의 경우는 아니다. – andreypopp

+0

@andreypopp : 당신은 내 대답 ???, I/O 바운드 프로세스에서 링크를 보았습니까? 우리가 멀티 코어 프로세스를 사용할 때 GIL이 "영향을받습니다"(intensionally) 며칠 동안) 나는 GIL과 I/O 경계와 CPU 경계 프로세스에 대해 모두 설명하고 싶지 않았습니다. 왜냐하면 화상 회의가 저의 지식과 영어보다 뛰어나다 고 가르쳐 주었기 때문입니다. 연결, 그들은 OP 케이스에 대해서 이야기하고있다. – mouad

+0

비디오를 보내 주셔서 감사합니다. 매우 도움이됩니다. – Kennedy

1

트위스트을 도울 수

희망은 사용 비 블로킹 I/데이터 지금 소켓을 사용할 수없는 경우 O, 그건 당신이 많은 소켓 연결을 처리 할 수 ​​있도록, 전체 스레드를 차단하지 않습니다 의미 하나의 스레드에서 동시에 I/O를 기다리는 중. 그러나 I/O (대용량 데이터 구문 분석)와 다른 작업을 수행하는 경우 여전히 스레드를 차단합니다.

stdlib의 소켓 모듈을 사용할 때 I/O를 차단하면 즉 socket.read이라고 할 때 데이터를 사용할 수 없다는 것을 의미합니다. 즉, 전체 스레드를 차단하므로 연결 당 하나의 스레드가 필요합니다. 동시 다운로드를 처리합니다. 새 연결 (다음 stdlib에서 threading + socket)에 대한

  • 포크 새 스레드 :

    동시성에 대한 두 가지 접근 방식이다.
  • 다중 I/O 및 핸들은 하나의 스레드 (Twisted)에 연결할 수 있습니다.