[英]How to run progress bar widget from dask.distributed in a separate thread?
[英]Responsive IPython notebook with running progress bar of dask/distributed
我正在使用dask.distributed
运行集群。 目前,我使用用作GUI的Jupyter Notebook将任务提交到群集。
各个笔记本单元包含以下代码。
%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.Future
的jobs.start_job
列表。 这项工作的最终结果是一份报告,其中包含一些数字和PDF图形。
现在,我想实现一个作业队列,其中带有一些指示,指示当前正在处理什么以及正在等待什么。
我的目标是实施以下方案。
我们团队的成员为新作业准备一些数据,然后在浏览器中打开Jupyter笔记本,在对add_new_job
的调用中的单元格中输入作业参数,然后执行该单元格,然后关闭该页面并等待计算完成。 他还可以打开页面并观察进度。
到目前为止,我发现如果我通过一次运行单元并等待一切完成而将单个作业提交给集群,那么一切都会像超级按钮一样工作。
如果我尝试通过简单地编辑单元代码并再次运行它来提交另一个作业,则集群将停止计算第一个提交的作业。 我对此的解释是r
被删除,并且它的析构函数将取消请求发送到集群。
如果我尝试通过制作笔记本的副本来提交新工作,则会在浏览器中打开一个新的空白页面,然后需要很长时间才能加载笔记本并允许用户执行任何操作。
同样,进度条(由progress
显示)通常会自行消失。
我已经阅读过有关JupyterHub的文章,但目前在我看来,使用它就像是一架带有重型火炮的射击麻雀,应该有更简单的方法。
我对此的解释是r被删除并且其析构函数将取消请求发送到集群
这是对的。 避免这种情况的一种简单方法是将r
添加到每次运行单元时都不会删除的某些结果集中
-- cell 1 --
results = []
-- cell 2 --
import jobs
jobid = jobs.add_new_job(...)
r = jobs.start_job(jobid)
results.append(r)
progress(r)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.