【发布时间】:2021-06-05 08:50:47
【问题描述】:
我正在处理多处理并尝试复制以下链接中给出的代码:
我的系统在 Spyder 和 Jupyter 中都挂起,如下所示。可能是什么原因?
以下是完全复制并运行的代码。但它只是挂起。
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
with Pool(3) as p:
print(p.map(f, [1, 2, 3]))
【问题讨论】:
-
您的代码与您链接的代码不同 - 特别是您没有包含
if __name__=‘__main__’:行 - 为什么不呢?尝试将其添加到代码中。仅供参考,多处理文档中的几乎每个示例都包含这一行;它不是偶然出现的,请参阅docs.python.org/3/library/multiprocessing.html -
嗨,Barny,我的系统似乎有问题。我仍然不确定发生了什么。我已经浏览了您粘贴的链接。它挂了太多时间,一个小时后显示以下消息:
> -
IPython Notebooks 通常在多处理方面存在大量问题。它们可以解决,但我发现使用更传统的 IDE 更容易,它使用普通的 python 解释器调用您的代码。
-
这是我个人的意见,但我认为 Jupyter 和所有其他 IPython Notebook 程序仅对需要“漂亮”的现场演示才真正有用。使用 python 本身(具体来说是 Cpython)编写真正的代码要好得多,因为这就是一切的设计目的。不要乱说“哦,我需要使用文档中没有的这个特殊技巧才能使某些东西起作用”。
-
如果您阅读docs on multiprocessing 的开头部分为: 注意此包中的功能要求 __main__ 模块可由子模块导入。这在编程指南中有介绍,但值得在这里指出。这意味着某些示例,例如 multiprocessing.pool.Pool 示例将无法在交互式解释器中工作。例如:,您会看到这不起作用。 将函数
f放入另一个.py 文件并导入它以使其工作。