Python Dask:非常低的CPU使用率和多线程?这是预期的吗?

Python Dask:非常低的CPU使用率和多线程?这是预期的吗?,python,multithreading,pandas,dask,fuzzywuzzy,Python,Multithreading,Pandas,Dask,Fuzzywuzzy,我正在使用dask作为 基本上,我在做一些计算时,没有向磁盘写入任何调用Pandas和Fuzzywuzzy的内容,这显然不会释放GIL,如果这有帮助的话,我运行如下操作: dmaster = dd.from_pandas(master, npartitions=4) dmaster = dmaster.assign(my_value=dmaster.original.apply(lambda x: helper(x, slave), name='my_value')) dmaster.compu

我正在使用dask作为

基本上,我在做一些计算时,没有向磁盘写入任何调用Pandas和Fuzzywuzzy的内容,这显然不会释放GIL,如果这有帮助的话,我运行如下操作:

dmaster = dd.from_pandas(master, npartitions=4)
dmaster = dmaster.assign(my_value=dmaster.original.apply(lambda x: helper(x, slave), name='my_value'))
dmaster.compute(get=dask.multiprocessing.get)
然而,该代码的一个变体已经运行了10个小时,而且还没有结束。我注意到在windows任务管理器中

RAM利用率相当低,与我的数据大小相对应 CPU使用率每2/3秒左右从0%反弹到5% 我有大约20个大小为100MB的Python进程,还有一个可能包含30GB数据的Python进程我有一台128GB的机器,有8核CPU 问题是:这种行为是预期的吗?我在这里设置一些dask选项显然是大错特错了吗

当然,我知道具体的细节取决于我到底在做什么,但也许上面的模式已经可以告诉我,有些事情是可怕的错误

非常感谢

当然,我知道具体的细节取决于我到底在做什么,但也许上面的模式已经可以告诉我,有些事情是可怕的错误

这是非常正确的。识别性能问题是一件棘手的事情,尤其是当并行计算开始发挥作用时。下面是我想到的一些事情

多处理调度程序每次都必须在不同进程之间移动数据。序列化/反序列化周期可能非常昂贵。使用该选项可以更好地处理此问题。 你的函数助手可能做了一些奇怪的事情。 一般来说,最好避免使用apply,即使是在熊猫身上。
一般来说,解决这些问题的一个好方法是创建一个共享平台,其他人可以轻松复制和使用它。通常在创建这样一个示例时,您会发现问题的解决方案。但如果这没有发生,至少你可以把责任推给库维护人员。在创建这样一个示例之前,大多数库维护人员都懒得花时间,手头的问题几乎总是有太多的细节,无法保证免费服务。

您预计这个过程需要多长时间?那台机器可能完全闲置、死锁或只是在等待什么。我们唯一可以肯定的是,它看起来确实没有做任何事情。谢谢@IanMcLaird的输入。我真的认为计算现在应该结束了,特别是如果有多重处理的话。本质上,这里的自由度是多少?为npartitions设置一个不同的值?嗨,MRocklin,是的,你是对的,尽管我认为有时仅仅唤起CPU不足等症状可以说明深层原因。如果可能的话,我会试着想出一个cme。再次感谢您抽出时间