繁体   English   中英

多处理在 Python 中工作但在 iPython 中不工作

[英]Multiprocessing working in Python but not in iPython

我在 iPython 中运行以下代码:

import multiprocessing

def my_function(x):
    """The function you want to compute in parallel."""
    x += 1
    return x


if __name__ == '__main__':
    pool = multiprocessing.Pool()
    results = pool.map(my_function, [1,2,3,4,5,6])
    print(results)

在 Windows 上的 ipython QT 控制台中。 但是,代码不起作用——QT 控制台只是冻结了。 这个问题是 iPython 特有的(上面的代码应该适用于常规的 Python 2.7)。

有什么解决办法吗?

文档

笔记

此包中的功能要求__main__模块可由子项导入。 这在编程指南中有介绍,但值得在这里指出。 这意味着一些示例,例如 multiprocessing.Pool 示例在交互式解释器中不起作用

至少在当前版本的 Jupyter Notebook(IPython 的继任者)中,您可以通过将目标函数移动到一个单独的模块并导入它来解决这个问题。

我不知道为什么会这样,这很奇怪,但确实如此。

即 - 在workers.py文件中放入

def my_function(x):
    """The function you want to compute in parallel."""
    x += 1
    return x

然后在 IPython/Jupyter 笔记本中输入:

import multiprocessing
import workers

pool = multiprocessing.Pool()
results = pool.map(workers.my_function, [1,2,3,4,5,6])
print(results)

此外 - 似乎不需要 if-main 东西。

图片来源:Gaurav Singhal

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM