2016-09-15 78 views
1

我正在使用Pandas 0.18/Python 3.5在intel i3(四核)上编写代码。熊猫,Concurrent.Futures和GIL

我已阅读本: https://www.continuum.io/content/pandas-releasing-gil

我也有一些工作是IO绑定(CSV解析文件到dataframes)。 我必须做大量的计算,主要是乘以数据框。

我的代码目前并行使用concurrent.futures ThreadPoolExecutor

我的问题是:

  • 在一般情况下,我应该使用线程并行运行大熊猫的工作,还是大熊猫有效利用一切核心的没有我明确地告诉它? (在这种情况下,我会连续执行我的工作)。

回答

1

尽我所能读取的文档,熊猫simply releases the GIL for certain operations告诉:

我们发布了一些用Cython 操作的全局解释器锁(GIL)。这将允许其他线程在 计算期间同时运行,潜在地允许从 多线程性能改进。值得注意的是,groupby,nsmallest,value_counts和一些 索引操作受益于此。

所有这一切意味着Python解释器可以执行其他线程,而大熊猫的计算仍然可以继续。这并不意味着熊猫会自动将计算扩展到多个线程。它们在文档排序提到这一点,以及:

的GIL的释放可能会受益使用用于用户交互(例如QT),或执行多线程 计算线程 的应用程序。

为了获得并行化的好处,您需要实际上是在您自己的代码中创建和执行多个线程。因此,如果您试图在应用程序中执行并行执行,则应继续使用ThreadPoolExecutor。请记住,熊猫只是释放GIL的一些操作,所以如果您不调用任何实际释放它的方法,您可能无法获得多线程性能改进。