我的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%,服务器冻结。你知道吗
Windows处理多进程的方式与Mac和Linux稍有不同。你知道吗
我猜你的问题是由于试图传递一个很难序列化的函数。可能它隐式地依赖于未传入的变量,或者它是动态定义的。以下是一些你可以尝试的东西,但不能保证:
mylist
,那么显式地传递它(方法apply
可以接受额外的关键字参数)相关问题 更多 >
编程相关推荐