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

ANK*_*JHA 8 dask dask-delayed dask-distributed

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

达斯克
ser = dd.from_pandas(ser, npartitions = 16) ser = ser.apply(fun1).apply(fun2)

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

有没有什么方法可以使用dask加快序列代码的速度,或者在串行执行dask操作时利用cpu的所有核心?

mdu*_*ant 15

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

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

ser = ser.apply(fun1).apply(fun2).compute(scheduler='processes')
Run Code Online (Sandbox Code Playgroud)

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

client = dask.distributed.Client()
Run Code Online (Sandbox Code Playgroud)

但您应该阅读文档