【问题标题】:Pandas, Concurrent.Futures and the GILPandas、Concurrent.Futures 和 GIL
【发布时间】:2016-09-15 15:37:28
【问题描述】:

我在 intel i3(四核)上使用 Pandas 0.18/Python 3.5 编写代码。

我读过这个: https://www.continuum.io/content/pandas-releasing-gil

我还有一些 IO 绑定的工作(将 CSV 文件解析为数据帧)。 我必须做很多计算,主要是乘以数据帧。

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

我的问题是:

  • 一般来说,我应该使用线程并行运行 pandas 作业,还是 pandas 可以有效利用所有内核而无需我明确告诉它? (在这种情况下,我将按顺序执行我的作业)。

【问题讨论】:

    标签: python multithreading pandas python-multithreading


    【解决方案1】:

    我可以从阅读文档中得知,pandas simply releases the GIL for certain operations

    我们正在某些 cython 上发布全局解释器锁 (GIL) 操作。这将允许其他线程同时运行 计算,可能允许从 多线程。值得注意的是groupbynsmallestvalue_counts 和一些 索引操作从中受益。

    这意味着 Python 解释器可以执行其他线程,而 pandas 的计算继续进行。这并不意味着 pandas 会自动跨多个线程扩展计算。他们在文档中也提到了这一点:

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

    为了获得并行化的好处,您实际上需要在自己的代码中创建和执行多个线程。因此,如果您尝试在应用程序中获得并行执行,则应继续使用 ThreadPoolExecutor

    请记住,pandas 仅为一些操作释放 GIL,因此如果您不调用任何实际释放 GIL 的方法,则可能无法通过多线程获得性能提升。

    【讨论】:

    猜你喜欢
    • 2013-02-06
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多