我正在使用Pandas0.18/Python3.5在英特尔i3 (四个核)上编写代码。
我读过这样的文章:https://www.continuum.io/content/pandas-releasing-gil
我还做了一些工作,即IO绑定(将CSV文件解析为dataframes)。我需要做大量的计算,主要是将数据乘以。
我的代码目前是使用concurrent.futures ThreadPoolExecutor并行的。
我的问题是:
发布于 2016-09-15 15:48:44
我只能从阅读文档中看出,熊猫只需为某些操作释放GIL
我们正在发布一些cython操作的全局解释器锁(GIL)。这将允许其他线程在计算期间同时运行,这可能允许多线程提高性能。值得注意的是,
groupby、nsmallest、value_counts和一些索引操作都从中受益。
这意味着其他线程可以由Python解释器执行,而由熊猫进行的计算则继续进行。这并不意味着熊猫会自动在多个线程上缩放计算结果。他们在文档中也提到了这一点:
GIL的发布可能有利于使用线程进行用户交互(例如QT)或执行多线程计算的应用程序。
为了获得并行化的好处,您需要在自己的代码中实际创建和执行多个线程。因此,如果要在应用程序中获得并行执行,则应该继续使用ThreadPoolExecutor。
请记住,熊猫只为某些操作发布GIL,所以如果您不调用任何实际发布它的方法,那么您可能无法通过多线程获得性能改进。
https://stackoverflow.com/questions/39515123
复制相似问题