Dask:多处理在Mac上工作,但在Windows上不工作

2024-09-27 07:33:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我的dask多处理代码应用了两个不同的lambda apply函数,在Mac上运行得非常好,但不能在windows7服务器上运行。我可以在Windows7上运行带有线程的代码,但是速度很慢。当我在Windows7服务器上尝试调度程序进程时,所有内核的CPU使用率都达到100%,服务器冻结。你知道吗

我可以在Windows中使用scheduler = 'threads'或指定num_workers来运行下面的代码,但它似乎并不包含所有核心。在Mac上使用num\u worker或线程,速度比scheduler='multiprocessing'慢得多。你知道吗

Windows是否需要一些额外的代码来避免内核/工作线程过载?你知道吗

import pandas as pd
import dask.dataframe as ddf
import multiprocessing

daskdf = ddf.from_pandas(mypandasdataframe, npartitions=4*multiprocessing.cpu_count())


def removecw(df):
    for word in mylist:
        df['A'] = df['A'].apply(lambda x: re.sub(r'\b{}$'.format(re.escape(word)), '', x))
    return df


daskdf = daskdf.map_partitions(removecw, meta = daskdf)
daskdf = daskdf.compute(scheduler='processes')

daskdf.to_csv('outputfilename')

在我的Mac上,我可以用预期的结果运行代码(从列A的字符串末尾删除公共词)。当我在Windows7服务器上尝试调度程序进程时,所有内核的CPU使用率都达到100%,服务器冻结。你知道吗


Tags: lambda代码import服务器dfmac线程multiprocessing
1条回答
网友
1楼 · 发布于 2024-09-27 07:33:58

Windows处理多进程的方式与Mac和Linux稍有不同。你知道吗

我猜你的问题是由于试图传递一个很难序列化的函数。可能它隐式地依赖于未传入的变量,或者它是动态定义的。以下是一些你可以尝试的东西,但不能保证:

  1. 在单独的模块中定义函数
  2. 确保函数不隐式依赖于任何全局变量。如果您需要一些额外的变量,比如mylist,那么显式地传递它(方法apply可以接受额外的关键字参数)
  3. 在本地计算机上尝试分布式调度程序。https://docs.dask.org/en/latest/scheduling.html#dask-distributed-local

相关问题 更多 >

    热门问题