coreutilsがPythonよりもソート速度が遅いのはなぜですか?

coreutilsがPythonよりもソート速度が遅いのはなぜですか?

Pythonのソート機能の速度をテストするために、次のスクリプトを作成しました。

from sys import stdin, stdout
lines = list(stdin)
lines.sort()
stdout.writelines(lines)

sort次に、それを1000万行を含むファイルのcoreutilsコマンドと比較しました。

$ time python sort.py <numbers.txt >s1.txt
real    0m16.707s
user    0m16.288s
sys     0m0.420s

$ time sort <numbers.txt >s2.txt 
real    0m45.141s
user    2m28.304s
sys     0m0.380s

組み込みコマンドは4つのCPUをすべて使用しますが(Pythonは1つだけを使用します)、実行には約3倍かかります!何を提供しますか?

sortUbuntu 12.04.5(32ビット)、Python 2.7.3、8.13を使用しています。

ベストアンサー1

イズカルタの口コミ答えはロケール別の比較です。コマンドsortは環境に表示されるロケールを使用し、Pythonはデフォルトでバイト順序比較を使用します。 UTF-8文字列を比較するのは、バイト文字列を比較するよりも困難です。

$ time (LC_ALL=C sort <numbers.txt >s2.txt)
real    0m5.485s
user    0m14.028s
sys     0m0.404s

どのように。

おすすめ記事