任务是对群集进行并行信息检索。 get_on_mc_retrievals
在提供候选者(mc)的情况下检索一些信息,它从pairwise_distances
调用支持多个CPU的sklearn
。即便如此,资源仍然未被充分利用,然后我实现了这段代码。
我的实施:
def dev_get_sentence_retrieval(sent_mcs, num_retrieval):
func = partial(MentionToRetrieval.get_one_mc_retrievals, num_retrieval=num_retrieval)
pool = mp.Pool(mp.cpu_count())
pool.daemon = True
jobs = [pool.map_async(func, sent_mcs[i]) for i in range(len(sent_mcs))]
res = [j.get() for j in jobs]
pool.close()
pool.join()
return res
问题
# test 1
for i in range(5):
res = dev_get_sentence_retrieval(conll_mcs[i], 20)
print(res)
# test 2
for i in range(5, 10):
res = dev_get_sentence_retrieval(conll_mcs[i], 20)
print(res)
Test1可以顺利执行,但是执行test2程序会永远挂起。一些SO帖子指出pool.join()
是解决方案,它会杀死僵尸进程,但它似乎不适合我的情况。我错过了代码中的任何内容吗?如果有更好的方法可以并行处理conll_mcs
,请随时提出任何建议。
注意:
# structure of `conll_mcs`
conll_mcs
|--- sentence_mcs
|--- word_position_mcs
|--- mc