2016-09-28 42 views
0

我正在运行与dask.distributed群集。目前我使用Jupyter笔记本将任务提交到群集,我使用它作为GUI。响应IPython笔记本运行dask进度条/分布式

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

%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的内容,但是现在看来,使用它就像是一支重炮的射击麻雀,应该有更简单的方法。

回答

1

我的对此的解释是r被删除,它的析构函数发送取消请求到集群

这是正确的。一个简单的方法来避免这种情况会增加r到不每次都删除了一些结果集运行你的

-- cell 1 -- 

results = [] 

-- cell 2 -- 

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

感谢。这会将笔记本变成一个作业队列管理器吗? – wl2776