如何使用Dask使用所有cpu核心?

时间:2018-07-06 14:34:25

标签: dask dask-distributed dask-delayed

我有超过35000行的熊猫系列。我想使用dask使其更有效率。但是,我的dask代码和pandas代码同时使用。 最初“ ser” 是熊猫系列,而 fun1 fun2 是在系列的各个行中执行模式匹配的基本功能。
熊猫
    ser = ser.apply(fun1).apply(fun2)

黄昏
ser = dd.from_pandas(ser, npartitions = 16) ser = ser.apply(fun1).apply(fun2)

在检查cpu核心的状态时,我发现并不是所有的核心都被使用了。只有一个内核已经习惯了100%。

是否有任何方法可以在使用dask进行串行操作时加快使用dask的速度,或者利用cpu的所有内核?

1 个答案:

答案 0 :(得分:10)

请参见http://dask.pydata.org/en/latest/scheduler-overview.html

您正在调用的函数很可能是纯python的,因此要求使用GIL,该锁可确保在一个线程中一次仅执行一条python指令。在这种情况下,您将需要在单独的进程中运行函数以查看任何并行性。您可以通过使用多进程调度程序来做到这一点

ser = ser.apply(fun1).apply(fun2).compute(scheduler='processes')

或使用分布式调度程序(在单个计算机上运行良好,并且实际上具有一些下一代优势,例如状态仪表板);在最简单的默认情况下,创建一个客户端就足够了:

client = dask.distributed.Client()

但是您应该阅读the docs