无法使多处理工作

时间:2016-12-18 01:53:17

标签: python python-2.7 multiprocessing jupyter-notebook

我必须实现一个用于计算大规模距离矩阵的并行软件。

这是我写的代码:

subset = #[list of proper objects]
nthreads = 10

def compute_distance_corcoeff(geneset, offset, q):
    for i in range(offset, len(geneset), nthreads):
        g1 = geneset[i]
        dvect = [np.corrcoef(g1.expr, g2.expr)[0,1] for g2 in geneset]
        q.put((i,dvect))

queue = Queue()
processes = []
for off in range(nthreads):
    processes.append(Process(target=compute_distance_corcoeff, args=(subset, off, queue)))

for p in processes:
    p.start()
for p in processes:
    p.join()

然后,我将从队列中收集部分结果。

不幸的是,看起来没有任何事情发生。它似乎陷入了join()

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

正如multiprocessing programming guidelines中所述,您必须先清空Queue,然后才能加入Process

您的逻辑最终会陷入死锁,因为进程无法终止,因为它们正在等待Queue中的消息被消耗。