我编写了一个代码,以使用multiprocessing
库并行运行任务。当我直接从终端运行此代码时,它使用先前定义的内核数即可正常工作。
from multiprocessing import Pool
from minepy import MINE
def mic(pair):
assert len(pair) == 4 and isinstance(pair, tuple)
x, y, x_name, y_name = pair
mine = MINE()
mine.compute_score(x, y)
return {(x_name, y_name): mine.mic()}
num_cores = multiprocessing.cpu_count() - 1
inputs = [(independent_var.as_matrix(), dependent_var.as_matrix(),
independent_var.name, dependent_var.name)
for i, independent_var in dataset.iteritems()
for j, dependent_var in dependent_variables.iteritems()
if len(dependent_var.unique()) > 1]
if len(inputs) > 0:
with Pool(num_cores) as p:
results = p.map(func, inputs)
但是,当我在Windows上通过Jupyter运行它时,几秒钟内正确使用了内核。之后,该过程将停止并进行查看。有什么办法可以避免这种行为?
答案 0 :(得分:0)
您提供的代码在这里可以正常工作。
也许您需要提供更多数据,例如inputs
列表的内容和/或func
函数的定义,以便我们重现该问题。
还要检查您正在使用的multiprocessing.cpu_count()
调用的结果-在许多环境中,它通常无法正确确定内核数。