首页 > 解决方案 > 为什么我从上一个问题中提取的代码多处理池映射挂起?

问题描述

我在这里以 senderle 为例。我以为我已经复制并粘贴了代码的主要部分,但我的代码不会停止。

pool.map在我尝试使用保持挂起来解决不同的问题之后,我尝试了这个示例。我想知道代码或我的多处理包是否真的有问题......

以下是我从 senderle 的最佳答案中提取的代码:

from itertools import product
import multiprocessing
def merge_names(a, b):
    return '{} & {}'.format(a, b)
names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
with multiprocessing.Pool(processes=3) as pool:
    results = pool.starmap(merge_names, product(names, repeat=2))
print(results)

我期待一个包含 36 个“合并”名称的列表,但该过程一直在无休止地运行。有什么帮助吗?

标签: pythonparallel-processingmultiprocessingpool

解决方案


阅读juanpa.arrivillaga 的评论后,我查找了“jupyter notebook multiprocessing not working”。第一个链接回答了我的问题。

  1. 必须添加 if __name__ == '__main__' : 到您的代码中。

  2. 将函数保存为单独的 py 文件并导入。

    • 就我而言,我将 merge_names 保存为 merge_names.py
    • 然后我的代码如下所示:

import multiprocessing from itertools import product import merge_names

if __name__ == '__main__': names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie'] with multiprocessing.Pool(processes=3) as pool: results = pool.starmap(merge_names.merge_names, product(names, repeat=2)) print(results)

现在代码在 Jupyter Notebook 中运行。


推荐阅读