python - 为什么我从上一个问题中提取的代码多处理池映射挂起?
问题描述
我在这里以 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 个“合并”名称的列表,但该过程一直在无休止地运行。有什么帮助吗?
解决方案
阅读juanpa.arrivillaga 的评论后,我查找了“jupyter notebook multiprocessing not working”。第一个链接回答了我的问题。
您必须添加
if __name__ == '__main__' :
到您的代码中。将函数保存为单独的 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 中运行。
推荐阅读
- javascript - 尝试在 Vue + Vuex 项目中嵌入 Vega 图表时出现未捕获的错误
- regex - Elisp 正则表达式匹配括号外的逗号
- jenkins - 如何以编程方式从 Jenkinsfile 生成 config.xml?
- javascript - 当用户选择与在同一行的其他列中选择的值相同的值时,显示带有错误消息的对话框
- mysql - 如何为mysql中的主要自动增量整数提供有效的默认值?
- python - Spark 进行计算,但输出为空
- python - Pandas 将 NULL Int64 转换为 Float64
- c++-winrt - 如何从文件中加载 CanvasSvgDocument?
- python - 我想安装 python pandas 结束 pip 但它给我带来了问题
- javascript - 使用 react-fine-uploader,如何从服务器获取成功上传文件的响应?