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