在Jupyterlab的wait_interactive()中,如何让ipyparallel打印状态更新



我有以下代码块,每个代码块都在JupyterLab中(这在Jupyter中是预期的,但不是Jupyter Lab):

def work(sleepTime):
import time
import datetime
start = datetime.datetime.now()
time.sleep(sleepTime)
return "Started at: "+str(start)+" Slept "+str(sleepTime)+" Ended at: "+str(datetime.datetime.now())
import ipyparallel as ipp
with ipp.Cluster(n=3) as rc:
loadBalancedView = rc.load_balanced_view()
ar = loadBalancedView.map(work,[10, 20, 30, 10, 20, 30, 10, 20, 30, 10, 20, 30, 10, 20, 30, 40, 1, 2, 3, 4, 10, 10, 10])
ar.wait_interactive()
ipp_result = ar.get()
ipp_result

一切正常-ipp_result单元格的输出为:

['Started at: 2022-05-31 17:51:12.078368 Slept 10 Ended at: 2022-05-31 17:51:22.088425',
'Started at: 2022-05-31 17:51:12.078694 Slept 20 Ended at: 2022-05-31 17:51:32.079246',
'Started at: 2022-05-31 17:51:12.082793 Slept 30 Ended at: 2022-05-31 17:51:42.100084',
'Started at: 2022-05-31 17:51:22.203872 Slept 10 Ended at: 2022-05-31 17:51:32.213932',
'Started at: 2022-05-31 17:51:32.193991 Slept 20 Ended at: 2022-05-31 17:51:52.214057',
'Started at: 2022-05-31 17:51:32.217268 Slept 30 Ended at: 2022-05-31 17:52:02.247332',
'Started at: 2022-05-31 17:51:42.214434 Slept 10 Ended at: 2022-05-31 17:51:52.223233',
'Started at: 2022-05-31 17:51:52.217649 Slept 20 Ended at: 2022-05-31 17:52:12.235251',
'Started at: 2022-05-31 17:51:52.226401 Slept 30 Ended at: 2022-05-31 17:52:22.256461',
'Started at: 2022-05-31 17:52:02.250662 Slept 10 Ended at: 2022-05-31 17:52:12.260710',
'Started at: 2022-05-31 17:52:12.238504 Slept 20 Ended at: 2022-05-31 17:52:32.258577',
'Started at: 2022-05-31 17:52:12.263679 Slept 30 Ended at: 2022-05-31 17:52:42.293737',
'Started at: 2022-05-31 17:52:22.260061 Slept 10 Ended at: 2022-05-31 17:52:32.270130',
'Started at: 2022-05-31 17:52:32.261914 Slept 20 Ended at: 2022-05-31 17:52:52.281975',
'Started at: 2022-05-31 17:52:32.273398 Slept 30 Ended at: 2022-05-31 17:53:02.303463',
'Started at: 2022-05-31 17:52:42.297340 Slept 40 Ended at: 2022-05-31 17:53:22.337396',
'Started at: 2022-05-31 17:52:52.285312 Slept 1 Ended at: 2022-05-31 17:52:53.286370',
'Started at: 2022-05-31 17:52:53.289760 Slept 2 Ended at: 2022-05-31 17:52:55.291821',
'Started at: 2022-05-31 17:52:55.295365 Slept 3 Ended at: 2022-05-31 17:52:58.298415',
'Started at: 2022-05-31 17:52:58.301646 Slept 4 Ended at: 2022-05-31 17:53:02.303464',
'Started at: 2022-05-31 17:53:02.307076 Slept 10 Ended at: 2022-05-31 17:53:12.317141',
'Started at: 2022-05-31 17:53:02.307284 Slept 10 Ended at: 2022-05-31 17:53:12.317337',
'Started at: 2022-05-31 17:53:12.320653 Slept 10 Ended at: 2022-05-31 17:53:22.330728']

正如预期的那样,一切都在同一时间开始,并在每个工人开始后的10、20和30秒内结束。

然而,来自第二块的输出不显示交互式进度。它只显示以下内容:

Starting 3 engines with <class 'ipyparallel.cluster.launcher.LocalEngineSetLauncher'>
0%|          | 0/3 [00:00<?, ?engine/s]
work:   0%|          | 0/23 [00:00<?, ?tasks/s]
Stopping engine(s): 1654019466
engine set stopped 1654019466: {'engines': {'0': {'exit_code': 0, 'pid': 22707, 'identifier': '0'}, '1': {'exit_code': 0, 'pid': 22709, 'identifier': '1'}, '2': {'exit_code': 0, 'pid': 22713, 'identifier': '2'}}, 'exit_code': 0}
Stopping controller
Controller stopped: {'exit_code': 0, 'pid': 22649, 'identifier': 'ipcontroller-1654019465-rj2q-13840'}

我预计ASCII进度条会随着进度的进展而更新。即使我将睡眠时间增加到更大的值(几分钟),它也不会更新。

如何在任务完成时更新进度?

由于我无法在注释中放入格式良好的代码,我将在这里添加以下工作,以显示在上一个单元格中运行%pip install ipyparallel后从这里启动的会话(当前为JupyterLab 3.2.8版)中的更新进度条:

import time
import numpy as np
import ipyparallel as ipp
with ipp.Cluster(n=3) as rc:
inputs = 1 + 0.1 *np.arange(10)
view = rc.load_balanced_view()
ar = view.map_async(time.sleep, inputs)
ar.wait_interactive()

代码基于这里的示例。

要启动临时会话,请转到此处并按launch binder按钮。几秒钟后,会话将为您启动。


我注意到,当我运行%pip install ipyparallel时,它也安装了tqdm,因此这是另一个包,可能您的版本与其他包不太兼容&JupyterLab也是。

最新更新