我正在使用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.Future
s的列表。作业的最终结果是一个PDF格式的报告,其中包含一些数字和一些绘图。在
现在,我想实现一个作业队列,其中包含一些关于正在处理的内容和正在等待的内容的指示。在
我的目标是实现以下场景。在
我的团队成员为新作业准备了一些数据,然后在浏览器中打开Jupyter笔记本,在调用add_new_job
的单元格中输入作业参数,然后执行该单元格,然后关闭该页面并等待计算完成。他也可以打开页面观察进展。在
到目前为止,我发现,如果我通过运行一次计算单元并等待所有任务完成,向集群提交一个作业,那么所有的工作都像一个符咒。在
如果我试图通过简单地编辑单元代码并再次运行它来提交一个作业,那么集群将停止计算第一个提交的作业。我的解释是,r
被删除,它的析构函数向集群发送取消请求。在
如果我试图通过制作笔记本的副本来提交新作业,浏览器中会打开一个新的空白页,然后需要很长时间才能加载笔记本并允许用户执行任何操作。在
另外,由progress
显示的进度条通常会自行消失。在
我已经读过关于JupyterHub的文章,但是现在我觉得使用它就像用重炮射击麻雀,应该有更简单的方法。在
这是正确的。避免这种情况的一个简单方法是将
r
添加到每次运行单元格时都不会删除的结果集相关问题 更多 >
编程相关推荐