2010-02-10 2 views
6

아파치 mod_wsgi에 전개 된 Django 애플리케이션을 개발하면서 멀티 스레딩 (파이썬 스레드, mod_wsgi 프로세스 = 1 스레드 = 8)의 경우에 파이썬이 사용 가능한 모든 프로세서를 사용하지 않는다는 것을 발견했습니다. 다중 처리 방식 (mod_wsgi processes = 8 threads = 1)을 사용하면 모든 것이 잘되고 내 컴퓨터를 가득 채울 수 있습니다.파이썬은 모든 프로세서를 스레드 모드로 사용합니까?

그래서 질문 :이 파이썬 동작이 정상입니까? 몇 가지 스레드가있는 1 개의 프로세스를 사용하는 것이 기본 mod_wsgi 방식이기 때문에 나는 그걸 의심합니다.

시스템은 다음과 같습니다

2xIntel 제온 5XXX 시리즈 (8 개 코어 (하이퍼 스레딩 16)) FreeBSD의 7.2 AMD64에와 2.6.4


덕분에 모든 답변 파이썬. GIL 때문에이 동작이 정상적인 것으로 나타났습니다. 여기 좋은 설명이 있습니다 : http://jessenoller.com/2009/02/01/python-threads-and-the-global-interpreter-lock/ 또는 stackoverflow GIL 토론 : .

+1

왜이 질문에는 3 개의 upvote가 있었습니까? 단순한 구글 검색은 만족 스러울 것입니다. – aaronasterling

+0

@aaronasterling : 우리는 간단한 질문과 간단한 대답으로 stackoverflow를 큰 지식 데이터베이스로 만들고 싶습니다. STFG – HardQuestions

답변

10

파이썬은 모든 프로세서를 스레드 모드로 사용합니까? No.

파이썬은 사용 가능한 모든 프로세서를 사용하지 않습니다. 이 파이썬 동작이 정상입니까? 예, GIL 때문에 정상입니다.

설명은 http://mail.python.org/pipermail/python-3000/2007-May/007414.html을 참조하십시오.

코어/프로세스 당 2 개 또는 4 개의 스레드가 있으면 성능이 향상 될 수 있습니다. 예를 들어 데이터베이스로부터의 응답을 기다리면 프로세스가 다른 연결을 차단하게됩니다.

+0

의 경우이 정보를 사용할 수 있는지 확인하십시오. 마지막 제안은 논 블로킹 단일 스레드 접근 방식보다 성능을 향상시킬 수 없습니다. – nosklo

1

그래도 여전히 모르겠지만 파이썬 인터프리터에 전역 잠금이있어 멀티 스레딩을 사용하는 경우에도 단일 인터프리터에서 모든 프로세서 리소스를 사용할 수 없습니다. IIRC, 전역 잠금은 I/O와 관련이 있습니다.

이 잠금의 결과를보고있는 것처럼 보입니다. 개인적으로 저는 단일 스레드로 여러 프로세스를 사용합니다.

4
  1. 파이썬은 모든 프로세서를 스레드 모드로 사용합니까? 번호 :

  2. 정상입니까? 네, 정상입니다. 파이썬은 모든 코어를 찾아 내기 위해 노력하지 않습니다.

  3. "몇 개의 스레드가있는 1 개의 프로세스가 기본 mod_wsgi 접근 방식"입니다. 그러나 그것은 최적이 아니거나 바람직하지 않습니다. 그것은 단지 기본값입니다. 아무 것도 읽지 마라.

모든 컴퓨터 자원을 사용하려면 OS에서 처리하도록하십시오. 프로세스를 사용하십시오.

다중 처리와 다중 스레드 간의 차이점은 대부분 측정하기가 어렵습니다. 프로세스 나 스레드를 사용하는 것이 중요합니다. 일반적으로 프로세스를 사용하는 것이 더 간단합니다. OS에 대한 사소한 지원이 있기 때문입니다.

운영 체제 (그리고 아파치) 시스템의 최대한 활용할 수 있습니다 결론

를 사용하여 여러 프로세스를.

스레드는 자신이 속한 프로세스에 대한 제한된 I/O 리소스 세트를 공유하며 웹 페이지 제공은 I/O 바인딩입니다. 프로세스는 독립적 인 I/O 리소스를 가지며 프로세서를 최대한 활용할 수 있습니다.

+0

참조 : http://docs.python.org/library/multiprocessing.html – exhuma

1

예. 파이썬은 실제로 멀티 스레드가 아닙니다. 대신 전역 잠금이 있으며 각 스레드는 차례대로 몇 가지 작업을 실행합니다. 따라서 파이썬에서 MT 애플리케이션을 작성하는 것이 훨씬 간단합니다. 부실 캐시 등에서 문제가 생길 수 없기 때문에

하나의 파이썬 프로세스가 하나의 CPU만을 차지할 수 있습니다. 멀티 코어 시스템을 최대한 활용하려면 여러 개의 Python 프로세스를 실행해야합니다.

3

아직 희망이 있습니다. GIL은 python.org에서 다운로드 한 C 파이썬 구현의 구현 결과물 일뿐입니다. Jython과 IronPython은 Python의 두 가지 다른 구현이며 GIL이 없으므로 하나의 결과로 더 나은 스레딩 결과를 얻을 수 있습니다.

+1

OP는 mod_wsgi와 함께 Jython이나 IronPython을 사용할 수 없습니다. –

관련 문제