【问题标题】:Multiprocessing error when running simple examples运行简单示例时出现多处理错误
【发布时间】:2018-04-01 22:54:57
【问题描述】:

我一直在尝试通过使用multiprocessing lib 运行一些并行代码来优化一些功能 但由于某种原因它不起作用(在 cmd、spyder 和 jupyter 中)。

实际上我得到了一个无限循环过程和一个 AttributeError

我测试了一些简单的函数来试图了解我做错了什么,但我认为这不是代码问题,我无法弄清楚问题所在。

谢谢!

【问题讨论】:

  • 不,我在创建池之前传递函数时遇到了同样的错误
  • 当我使用那里描述的解决方案时它对我有用
  • 无关紧要,只是想让你知道,这在 jupyter 中杀死了我的内核。我什至无法重新启动它。我完全关闭了 jupyter,但仍然无法重新启动它,因为我得到了AttributeError: type object 'IOLoop' has no attribute 'initialized'。我发现这和tornado>=5.0的版本有关。更多信息here。我通过卸载 tornado5.0 并安装 tornado4.5.3 解决了这个问题。
  • @user8212173 它也杀死了我的。我不得不CTRL + Z 停止整个进程,然后手动杀死每个子进程,最后是 repl

标签: python python-3.x multiprocessing python-multiprocessing attributeerror


【解决方案1】:

在 Pool 之前定义 square 方法。完整示例:

➜ python3      
Python 3.6.4 (default, Mar 13 2018, 09:50:23) 
[GCC 6.3.0 20170519] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import multiprocessing as mp
>>> 
>>> def sq(x):
...     return x * x
... 
>>> with mp.Pool(2) as pool:
...     results = pool.map(sq, [1,2,3,4,5])
... 
>>> print (results)
[1, 4, 9, 16, 25]
>>>

【讨论】:

  • 没有工作:/我在原始帖子中添加了最后两个图像以显示它...在我的原始代码中,之前也定义了函数,..我将删除错误的示例我在编辑中测试过
  • 这可能是 Windows 问题。您可以尝试将进程数显式传递给Pool。就像Pool(2)
  • 我使用anaconda,通过jupyterlab,spyder和命令提示符,它们都不起作用
  • @PatrickNasser,把你现在拥有的代码放到像example.py 这样的文件中,然后在读取if __name__ == '__main__': 的if 语句中执行池内容。用你的 python 运行脚本,看看是否有效
  • 我刚刚看到@user8212173 之前在原始问题中的评论!现在我明白了,谢谢! (我现在对我的电脑很生气哈哈)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 2017-07-09
  • 2015-08-23
相关资源
最近更新 更多