Python 从多进程切换到多线程Dask.DataFrame
我有一个关于使用dask并行化代码的问题。我有一个熊猫数据帧和8核CPU。所以我想按行应用一些函数。下面是一个例子:Python 从多进程切换到多线程Dask.DataFrame,python,multithreading,pandas,dataframe,dask,Python,Multithreading,Pandas,Dataframe,Dask,我有一个关于使用dask并行化代码的问题。我有一个熊猫数据帧和8核CPU。所以我想按行应用一些函数。下面是一个例子: import dask.dataframe as dd from dask.multiprocessing import get # o - is pandas DataFrame o['dist_center_from'] = dd.from_pandas(o, npartitions=8).map_partitions(lambda df: df.apply(lambda x
import dask.dataframe as dd
from dask.multiprocessing import get
# o - is pandas DataFrame
o['dist_center_from'] = dd.from_pandas(o, npartitions=8).map_partitions(lambda df: df.apply(lambda x: vincenty((x.fromlatitude, x.fromlongitude), center).km, axis=1)).compute(get=get)
该代码同时运行8个CPU。现在,我有一个问题,每个进程都会消耗大量内存,就像主进程一样。所以,我想用共享内存运行多线程。我尝试将
从dask.multiprocessing import get
更改为从dask.threaded import get
。但是它没有使用我所有的CPU,我认为它运行在单核上。是的,这是线程和进程之间的折衷:
- 线程:只有在使用非python代码的情况下才能很好地并行化(大多数API都是针对数值数据的,而不是apply)
- 进程:需要在进程之间复制数据