我正在使用Dask DataFrame并行化以下正则表达式搜索代码。
ddf = dd.from_pandas(in_desc, npartitions=16)
def r_s(dataframe1):
for vals in dataframe1:
for regex in dataframe.values:
if(re.search(regex[0], vals)):
pass
res = ddf.map_partitions(r_s, meta=ddf)
res.compute()
in_desc和dataframe1是两个熊猫数据帧。
在使用mpstat -P ALL 1
检查内核利用率时,我注意到在16个CPU内核中,没有一个内核的利用率超过20%。但是,所有内核的利用率之和约为100%。
使用dask是否可以将所有内核的利用率提高到50%以上?如果是,那么我应该怎么做或修改我的代码来完成任务?
谢谢。
答案 0 :(得分:1)
dask数据框的默认调度程序使用多个线程。这是大多数熊猫计算的正确选择,尤其是矢量化数值运算,但不是全部。
但是,您的计算大部分是纯Python代码,因此会受到GIL的影响。我建议您改为使用多处理调度程序
res.compute(scheduler='processes')