2016-09-28 40 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