我正在使用joblib进行并行处理。
我有16个核心(num_cores),我的代码如下:
with Parallel(n_jobs=num_cores) as parallel:
temp = []
temp.append(copy.deepcopy(parallel(delayed(my_func)(parA[s],parB,parC,s,len(parA)) for s in range(len(parA)))))
没有结果彼此依赖,也没有任何子计算。我的问题是,批处理中通常有64个作业(len(parA)),当新批处理启动时,所有核心确实按预期忙碌。但是,随着一些工作的完成,我的核心无法获得新的工作。因此,在初始完全利用之后,我使用10个核,然后是5个,然后是3个,然后是1个,即使堆栈中还有多个作业。在我写作的时候,剩下约12个工作岗位,但只有一个核心工作。为什么呢?
奖金问题:如何为工人指定工作?是64(在我的情况下)分为16个工人,所以每个人得到4个,然后一个完成,下一个开始?如果是这样的话,是不是有些工人刚刚完成他们的4个工作,并且得不到更多(这似乎不太可能,因为目前的最后一个工人,还有4个以上的工作岗位)。或者每个工人一完成就找到工作?
谢谢