2016-09-15 12 views
1

私はIntel i3(4つのコア)にPandas 0.18/Python 3.5を使ってコードを書いています。Pandas、Concurrent.Futures and GIL

私はこれを読んでいる: https://www.continuum.io/content/pandas-releasing-gil

は私もIO(データフレームにCSVファイルを解析)が結合され、いくつかの仕事を持っています。 私は、ほとんどがデータフレームを掛けている多くの計算をしなければなりません。

私のコードは現在concurrent.futures ThreadPoolExecutorを使用して並列処理されています。

私の質問は:一般的に

  • 、私は並列にパンダのジョブを実行するスレッドを使用する必要がある、またはパンダは私が明示的にそれを伝えることなく、すべてのコアを有効活用するのですか? (その場合、私は自分の仕事を逐次実行する)。

答えて

1

ベスト私は、ドキュメント、パンダsimply releases the GIL for certain operationsを読んでから伝えることができます:

我々はいくつかのcython 操作上のグローバル・インタプリタ・ロック(GIL)を放出しています。これにより、 の計算中に他のスレッドが同時に実行され、 マルチスレッドからパフォーマンスが向上する可能性があります。特に、groupby,nsmallest,value_countsおよび の索引付け操作がこれから恩恵を受ける。

これは、他のスレッドがPythonインタプリタによって実行されることを意味しますが、計算はpandasによって継続されます。これは、パンダが自動的に計算を多くのスレッドにわたってスケーリングすることを意味するものではありません。これらは一種の同様ドキュメントでこれを言及する:

GILを解放すると、ユーザ対話(例えばQT)、またはマルチスレッド 計算を実行するためのスレッド を使用するアプリケーションの利益を得ることができます。

並列化の利点を得るには、実際にコード内に複数のスレッドを作成して実行する必要があります。したがって、アプリケーションで並列実行を試みる場合は、ThreadPoolExecutorを引き続き使用する必要があります。

パンダは、の操作では、の操作しか公開しないため、実際にリリースするメソッドを呼び出さない場合は、複数のスレッドでパフォーマンスが向上しない場合があります。

関連する問題