2017-07-20 5 views
0

大きなパンダデータフレームをメモリにロードしています。システムが他のプロセスにCPUを与えていること約16分があります関数で使用される時間をデバッグするにはどうすればよいですか?

%%time 
df = pd.read_csv(data_file) 

CPU times: user 3min 53s, sys: 57.5 s, total: 4min 50s 
Wall time: 21min 2s 

:私は%%time魔法で必要な時間を測定することができます。私のプロセスは時間の100%(Difference between CPU time and wall time)を取らないことを知っています。しかし、これは私だけが使用する仮想マシンなので、16分のほとんどはデータ読み込みタスクに関連するプロセスに関連していると思います。

htopで使用されているリソースを目で確認すると、ほとんどのコアがアイドル状態になり、システムはスワップメモリ​​の容量をゆっくりと増加させます。私は、スワップのI/O操作がほとんどの時間を費やしていると思うが、私はそれを確認したい。

私は読書プロセスを改善するために何かできるかどうかを見たいと思っていますが、read_csvの中で過ごした時間を調べる方法はわかりません。

編集:オリの答えのおかげで、私はほとんどの時間は、パンダのinternals.py _stack_arrays()メソッドとオブジェクトpandas.parser.TextReaderreadコールに費やされたことが把握できました。パンダが列の種類を把握していましたか?私は辞書を型で提供しようとしましたが、読み込み時間は3分に短縮されました。

答えて

1

私はそのような場合にプロファイラを使用することを提案します。

Pythonプログラムのプロファイリングは、プログラムの実行時間とそれを構成するすべてのものを測定する動的分析を実行しています。その は、それぞれの機能で費やされた時間を測定することを意味します。これにより、 は、あなたのプログラムがどこで時間を費やしているのか、そしてどの領域が最適化する価値があるのか​​についてのデータを提供します。

たとえば、cProfileライブラリを使用できます。詳細な説明はhereです。

関連する問題