2012-08-03 3 views
3

저는 파이썬을 사용하여 많은 시간이 소요될 수있는 코드를 작성했습니다 (재귀가 많이 포함됨). 코드의 런타임을 테스트하고 있었고 코드가 얼마나 복잡해 졌는지에 상관없이 Python이 내 CPU의 전체 컴퓨팅 성능을 소모하지 않는다는 것을 알았습니다. 필자는 Windows 7에서 Intel Dual Core를 사용하여 Python을 실행 중이며 Python은 CPU를 1 대 이상 사용하지 않습니다. 기본적으로 하나의 CPU가 실행 중이며 다른 CPU는 유휴 상태입니다.파이썬 및 CPU 사용량

백그라운드에서 어떤 일이 일어나고 있는지 설명 할 수 있습니까? 미리 감사드립니다!

+1

관련 : http://en.wikipedia.org/wiki/Multiprocessing – underbar

+0

이에 대한 자주 묻는 질문, 모두가 그것을이 요청해야합니다. – Wug

답변

6

스크립트는 단일 프로세스로 실행되므로 단일 프로세서에서 실행됩니다. Windows 스케줄러는 아마도 한 코어에서 다른 코어로 이동할 것입니다. 그러나 한 번에 두 곳 이상에서 단일 프로세스를 실행할 수는 없습니다.

CPU 사용량을 더 많이 사용하려면 여러 프로세스에서 코드의 여러 인스턴스를 실행할 수 있도록 작업 부하를 분할하는 방법을 찾아야합니다.

2

파이썬 응용 프로그램이 멀티 스레드되지 않은 경우 CPU 중 하나 이상의 코어를 사용하여 실행하지 않습니다.

+2

파이썬의 멀티 쓰레딩은 다소 제한적이고 잘 확장되지 않는다는 점에 유의할 가치가 있습니다. (최소한 C 기반 Python 엔진의 경우). –

2

실제로 멀티 스레드 Python 응용 프로그램은 CPU 코어 1 개 이상을 사용하기에 충분하지 않습니다. 파이썬은 "Global Interpreter Lock"(GIL)이라는 구조를 사용합니다. 파이썬 응용 프로그램 내에서 모든 코드는이 잠금을 가져야합니다. 즉, 파이썬 응용 프로그램 내에서 다중 프로세서가 있고 다중 스레드 인 경우에도 특정 시점에 하나의 코드 스레드 만 실행됩니다.

말했다 - 당신은 멀티 모듈을 사용하는 경우, 하나 개 이상의 핵심 사용할 수 있습니다

import multiprocessing 

def run(): 
    x = 1+1 
    save(x) 

if __name__=="__main__": 
    for i in range(100): 
     p = multiprocessing.Process(target=run) 
     p.start()