%prunを使用してIPythonで自分のコードをプロファイリングすると、関数の時間の大部分がガベージコレクションに費やされていることがわかりました(0.334秒対0.428時間)。なぜガベージコレクションが遅いのですか?
79254 function calls (77408 primitive calls) in 0.428 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
5 0.334 0.067 0.334 0.067 {gc.collect}
15757 0.005 0.000 0.007 0.000 {isinstance}
1584 0.002 0.000 0.004 0.000 dtypes.py:68(is_dtype)
私は関数を呼び出す前に、その値を戻した後、ガベージコレクションを有効/無効にしようとしましたが、タイミングが実質的に同じです。
import gc
gc.disable()
x = foo()
gc.disable()
なぜこのようなボトルネックであり、スピードアップするのか誰にも分かりますか?
私のPython /パンダのバージョンは以下の通りです:
Python 2.7.11 |Continuum Analytics, Inc.| (default, Dec 6 2015, 18:57:58)
Pandas 0.17.1
:ここ
は、この特定のトピックに関するいくつかの良い記事です。 –
答えは「いいえ」と思いますが、ここでコードを共有することはできますか?そうでなければ、おそらくあなたはこのgcの問題を示す何かを書くことができます。 :s –
@AndyHayden私はまだプロファイリングしています。ボトルネックは、多くの回帰を実行する関数であるように見えます。 MVEをまとめることができれば、投稿を編集します。 – Alexander