我有一个jupyter笔记本,在进行一些初始化之后,代码单元[4],[5],[6]彼此无关,可以并行执行以减少吞吐时间。我调查了ipyparallel并获取了模块可执行文件。我还浏览了以下线程并按所述编写了代码。但是结果却不是我所期望的。代码单元[4]-[6]仍按顺序执行。
Is there a way to run multiple cells simultaneously in IPython notebook?
我想知道使用ipyparallel是否可以实现我想要的目标,如果可以,正确的方法是什么。
下面是我的测试代码(我几乎可以确定这不是由于我设置了e[i].block = True
,但是将其设置为false时我无法获得输出。):
对于那些需要如何设置ipyparallel模块的信息:
How to set up ipyparallel module
安装iparallel模块:
conda install ipyparallel
(或:pip install ipyparallel
)
启用模块:
ipcluster nbextension enable
启动引擎:
ipcluster start -n <put desired number of engines to run here>
此处代码开始:
In [1]:
import ipyparallel as ipp
rc = ipp.Client()
lbview = rc.load_balanced_view()
In [2]:
e = [None]*4
for i in range(0,4):
e[i]=rc[i]
e[i].block = True
e[i].activate('%d'%i)
In [3]:
%%px
import matplotlib.pyplot as plt
import time
In [4]:
%%px0
print("I am doing some heavy calculation for Class A")
fig = plt.figure(figsize=(15,10))
plt.plot([1,2,3],[1,2,3])
print(time.ctime())
In [5]:
%%px1
print("I am doing some heavy calculation for Class B")
fig = plt.figure(figsize=(15,10))
plt.plot([1,2,3],[3,2,1])
print(time.ctime())
In [6]:
%%px2
print("I am doing some heavy calculation for Class C")
fig = plt.figure(figsize=(15,10))
plt.plot([1,2,3],[1,2,1])
print(time.ctime())