响应式IPython笔记本电脑,运行dask/distributed进度条

2024-05-12 12:15:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用dask.distributed运行群集。目前,我使用Jupyter笔记本作为GUI向集群提交任务。在

相应的笔记本单元包含以下代码。在

%pylab inline
%load_ext autoreload
%autoreload 2

from distributed import progress
sys.path.append('/path/to/my/python/modules/on/NAS')

import jobs
jobid = jobs.add_new_job(...)
r = jobs.start_job(jobid)
progress(r)   

jobs是我的python模块的名称。jobs.add_new_job返回带有作业标识符的字符串。jobs.start_job返回distributed.client.Futures的列表。作业的最终结果是一个PDF格式的报告,其中包含一些数字和一些绘图。在

现在,我想实现一个作业队列,其中包含一些关于正在处理的内容和正在等待的内容的指示。在

我的目标是实现以下场景。在

我的团队成员为新作业准备了一些数据,然后在浏览器中打开Jupyter笔记本,在调用add_new_job的单元格中输入作业参数,然后执行该单元格,然后关闭该页面并等待计算完成。他也可以打开页面观察进展。在

到目前为止,我发现,如果我通过运行一次计算单元并等待所有任务完成,向集群提交一个作业,那么所有的工作都像一个符咒。在

如果我试图通过简单地编辑单元代码并再次运行它来提交一个作业,那么集群将停止计算第一个提交的作业。我的解释是,r被删除,它的析构函数向集群发送取消请求。在

如果我试图通过制作笔记本的副本来提交新作业,浏览器中会打开一个新的空白页,然后需要很长时间才能加载笔记本并允许用户执行任何操作。在

另外,由progress显示的进度条通常会自行消失。在

我已经读过关于JupyterHub的文章,但是现在我觉得使用它就像用重炮射击麻雀,应该有更简单的方法。在


Tags: path代码importaddnew作业jobsjob
1条回答
网友
1楼 · 发布于 2024-05-12 12:15:28

My explanation of this is that r is deleted and its destructor sends cancellation requests to the cluster

这是正确的。避免这种情况的一个简单方法是将r添加到每次运行单元格时都不会删除的结果集

  cell 1   

results = []

  cell 2  

import jobs
jobid = jobs.add_new_job(...)
r = jobs.start_job(jobid)
results.append(r)
progress(r)

相关问题 更多 >