python - 无法让多处理工作

标签 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() 处。

我在这里缺少什么?

最佳答案

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

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

关于python - 无法让多处理工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41204797/

相关文章:

用于确定可用空间的 Python 脚本提供的结果不准确

python - 在 python 中转义 mysql 语句时遇到问题

javascript - 使用 Python 2.7 抓取/解析投注赔率

python - 在 OpenCV 中从桌面获取输入流

python - 从列中删除带冒号的单词 - 为什么它不起作用?

python dask dataframe将元组列拆分为两列

python - 将数量写入特定日记帐 - Odoo v8

python - 为什么 multiprocessing.Queue 没有 task_done 方法

multithreading - 从持久性存储读取时,CPU核心是否繁忙?

Python:在多个进程之间共享一个大型对象字典