2013-02-13 1 views
1

: 내 노트북의 우분투 12.04 (32 비트), 셀러론 2 심에서 다음 "최고"CPU 사용량을 얻을파이썬, 상단 표시하는 매우 간단한 스크립트 등을 감안할 때 낮은 CPU 사용률

import subprocess 

while True: 
    x = subprocess.Popen('ls -ltr /usr/lib', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() 

:

subprocess.Popen이 일은 os.popen로 대체하는 경우
x = subprocess.Popen('ls -l /usr/lib', ... 
python3.2.3: 6%, python2.7.3: 5% (ls 0%) 

x = subprocess.Popen('gcc --version', ... 
python3.2.3: 22%, python2.7.3: 18% (gcc 0%) 

x = subprocess.Popen('pwd', ... 
python3.2.3: 47%, python 2.7.3: 35% (pwd 0%) 

, 결과는 다릅니다 : 왜 CPU 사용이

x = os.popen('ls /usr/lib').read() 
python3.2.3: 8%, python2.7.3: 3% (gcc 0%) 

x = os.popen('gcc --version').read() 
python3.2.3: 45%, python 2.7.3: 9% 

x = os.popen('pwd').read() 
python3.2.3: 68%, python 2.7.3: 22% 

입니다 너무 낮고 매우 다른가요? 나는 코어 i5와 atom 우분투에서 이것을 시도했는데 결과는 100 % (3.2)와 80 % (2.7)에 가까웠다. 무엇보다 맨위로, 내 플랫폼에 문제가 있습니까?

+3

결과가 정확히 잘못되었거나 예상치 못한 부분이 있습니까? –

+0

제가 언급했듯이 코어 i5와 atom 우분투에서 이것을 시도한 결과는 100 % (3.2)와 80 % (2.7)에 가깝습니다. 모든 플랫폼에서 100 % CPU로드를 기대합니다. – eserge

+1

이것은 CPU를로드하는 끔찍한 방법입니다. 어려운 작업 대신 엄청나게 많은 작업을 생성합니다. 큰 숫자 나 뭔가를 요소로 삼으라고 말하십시오. – katrielalex

답변

1

적어도 일부 문제는 CPU가 아닌 디스크를 사용하는 것입니다. "ls -l/usr/lib"는 확실히 디스크 접근을 포함 할 것입니다. (각 파일에 대해 stat()을 실행합니다) : gcc를 로딩하면 디스크 접근이 줄어들고 쉘 내장도 훨씬 적습니다.

os.popen, subprocess.Popen 및 Python3 버전이 새 쉘을 생성하는지 여부, 쉘의 특성 (예 :/etc/profile을 읽어야하는지 여부)이 다를 수도 있습니다. 디스크), 등등.

이미 언급 한 바와 같이 계산 집약적 인 작업은 "ls -l"과 같은 IO 바인딩 작업보다 높은 CPU 사용량을 얻게됩니다. 다음은 100 % CPU를 매우 멋지게 만듭니다 :

while True: 
    a = 11*11 
+0

subprocess.Popen ('echo "hello"'- 35 % :( – eserge

+0

) 새로운 쉘을 생성하기 위해 IO 작업을 계속하고있을 수 있습니다. 'iostat -xc 1'은 무엇을보고합니까? – rkday

+0

(또한 화면은 내가 TTY IO가 작동하는 방법을 알고하지 않습니다하지만, 여전히 정말 계산 작업 없음) – rkday