Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从多进程切换到多线程Dask.DataFrame_Python_Multithreading_Pandas_Dataframe_Dask - Fatal编程技术网

Python 从多进程切换到多线程Dask.DataFrame

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

我有一个关于使用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: 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)
  • 进程:需要在进程之间复制数据

根据它的说法,只有当您的计算由非Python代码控制时,它才提供并行性,例如在NumPy数组、Pandas数据帧中对数值数据进行操作时,或者在生态系统中使用任何其他基于C/C++/Cython的项目时。因此,我认为它不起作用。我认为欢迎您将此作为回答,尽管我还将提到分布式调度程序,它允许线程和进程的组合。