多处理池挂在 jupyter 笔记本中
Posted
技术标签:
【中文标题】多处理池挂在 jupyter 笔记本中【英文标题】:multiprocessing pool hangs in jupyter notebook 【发布时间】:2019-11-08 19:53:41 【问题描述】:我有一个非常简单的脚本,如下:
import multiprocessing as multi
def call_other_thing_with_multi():
P = multi.Pool(3)
P.map(other_thing, range(0,5))
P.join()
def other_thing(arg):
print(arg)
return arg**2.
call_other_thing_with_multi()
当我调用它时,我的代码会永久挂起。这是在带有 python 2.7 的 Windows 上。
感谢您的指导!
【问题讨论】:
【参考方案1】:按照documentation,你需要在join()
之前调用close()
:
import multiprocessing as multi
def call_other_thing_with_multi():
P = multi.Pool(3)
P.map(other_thing, range(0,5))
P.close() # <-- calling close before P.join()
P.join()
print('END')
def other_thing(arg):
print(arg)
return arg**2.
call_other_thing_with_multi()
打印:
0
1
2
3
4
END
编辑:最好使用上下文管理器,不要忘记致电close()
:
def call_other_thing_with_multi():
with multi.Pool(3) as P:
P.map(other_thing, range(0,5))
print('END')
【讨论】:
这个其实也挂了 @jasonm 你运行的是完全相同的代码吗?我在 Python 3.6 上,但应该没什么区别。我添加了带有上下文管理器的版本。 是的,运行相同的代码。它不起作用,并且上下文在 py27 中不起作用,如所示。 ***.com/questions/25968518/… 我的问题措辞不当,您的解决方案确实有效。以上是关于多处理池挂在 jupyter 笔记本中的主要内容,如果未能解决你的问题,请参考以下文章
Jupyter notebook 永远不会使用多处理(Python 3)完成处理