我试图在我的Jupyter Notebook中运行下面的基本示例代码。
import multiprocessing
import time
def square(x):
print('=====> ',x)
return x * x
if __name__ == "__main__":
pool = multiprocessing.Pool()
inputs = [0,1,2,3,4]
outputs_async = pool.map_async(square, inputs)
print(outputs_async)
outputs = outputs_async.get(timeout=10)
print("Output: {}".format(outputs))
我得到下面的输出
<multiprocessing.pool.MapResult object at 0x00000249E3A17188>
---------------------------------------------------------------------------
TimeoutError Traceback (most recent call last)
<ipython-input-3-f7d558819a08> in <module>
12 outputs_async = pool.map_async(square, inputs)
13 print(outputs_async)
---> 14 outputs = outputs_async.get(timeout=10)
15 print("Output: {}".format(outputs))
~\Anaconda3\lib\multiprocessing\pool.py in get(self, timeout)
651 self.wait(timeout)
652 if not self.ready():
--> 653 raise TimeoutError
654 if self._success:
655 return self._value
TimeoutError:
看起来像这样,代码本身没有调用我的square方法。
请帮助如何解决这个问题。
谢啦
1条答案
按热度按时间rbl8hiat1#
作为一种变通方法,将你想在多进程工作器中运行的代码放在一个独立的“。py”模块,一个真实的文件,而不是笔记本单元格,在你的“sys.path”-然后将其用作:
它可能被破坏的原因是,使用Spawn方法(Windows和Mac中多处理的默认方法),涉及通过使用正常的Python导入机制导入代码运行所需的所有模块-如果代码在笔记本单元格中,则无法导入。
它仍然 * 可能无法工作 *,因为
__main__
模块本身处于Jupyter的保护之下-但看起来他们(Jupyter开发人员)修补了足够的东西,使其表现得像一个普通的脚本-否则您甚至不会得到上面列出的错误消息。