次のような非常に単純なスクリプトがあるとします。
import subprocess
while True:
x = subprocess.Popen('ls -ltr /usr/lib', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
私のラップトップのUbuntu 12.04(32ビット)、celeron 2コアで、次の「トップ」CPU使用率が得られます。
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%)
subprocess.Popen を os.popen に置き換えると、結果は異なります。
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%
CPU使用率が非常に低く、非常に異なるのはなぜですか? これをcore i5とatom ubuntusで試したところ、結果はほぼ100% (3.2) と80% (2.7) でした。一番上に他に何もありません。私のプラットフォームの何が問題なのですか?