我的dask多处理代码可以应用两个不同的lambda应用功能,在Mac上运行完美,但不能在Windows 7服务器上运行。我可以在Windows 7上使用线程运行代码,但是速度非常慢。当我在Windows 7服务器上尝试调度程序进程时,所有内核上的CPU使用率均达到100%,并且服务器冻结。
我可以使用scheduler = 'threads'
或通过指定num_workers
在Windows中运行以下代码,但似乎并不能使用所有内核。在Mac上使用num_workers或线程,它比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列的字符串末尾删除常用单词)。当我在Windows 7服务器上尝试调度程序进程时,所有内核上的CPU使用率均达到100%,并且服务器冻结。
答案 0 :(得分:0)
Windows处理多重处理的方式与Mac和Linux有所不同。
我的猜测是您的问题是由于尝试传递难以序列化的函数引起的。也许它隐式依赖于未传入的变量,或者它是动态定义的。您可以尝试以下操作,但不能保证:
mylist
,则应将其显式传递(apply
方法可以使用其他关键字参数)