2012-12-15 44 views
1

我正在使用負載平衡視圖提交任務。如何使用IPython Parallel查看已提交任務的詳細信息?

我希望能夠從不同的客戶端連接並通過提交的函數和參數查看剩餘的任務。

Forexample:

def someFunc(parm1, parm2): 
    return parm1 + parm2 

lbv = client.load_balanced_view() 
async_results = [] 
for parm1 in [0,1,2]: 
    for parm2 in [0,1,2]: 
     ar = lbv.apply_async(someFunc, parm1, parm2) 
     async_results.append(ar) 

從我提交這個從我的客戶可以找出其結果與去了基於他們對async_results陣列中的順序函數調用。

我想知道的是,如果我使用queue_status或history命令從其他客戶端檢索結果以獲取msg_id和client.get_result命令以獲取與msg_id相關的函數和參數,檢索結果。

回答

1

這些事情被醃製,並存儲在中心數據庫的'緩衝區'中。如果你想看看它們,你必須從數據庫中取出這些緩衝區,然後解壓它們。

假設你已經msg_ids的列表,這裏要說的是,你可以重建樓ARGS和kwargs所有這些請求的方式:

# msg_ids is a list of msg_id, however you decide to get that 
from IPython.zmq.serialize import unpack_apply_message 

# load the buffers from the hub's database: 
query = rc.db_query({'msg_id' : {'$in' : msg_ids } }, keys=['msg_id', 'buffers']) 
# query is now a list of dicts with two keys - msg_id and buffers 

# now we can generate a dict by msg_id of the original function, args, and kwargs: 
requests = {} 
for q in query: 
    msg_id = 
    f, args, kwargs = unpack_apply_message(q['buffers']) 
    requests[q['msg_id']] = (f, args, kwargs) 

這個,你應該能任務關聯基於它們的功能和參數。

One Caveat:由於f已經通過酸洗,往往比較f is original_f將會是False,因此您必須進行較寬鬆的比較,如f.__module__ + f.__name__或類似。

對於更詳細的信息,here is an example產生一些請求, 然後基於函數和參數關於原始請求可能看起來像什麼有一些先驗知識重建和關聯它們。

+0

感謝這有助於很多。在IPython文檔中有幾處討論協作式集羣使用的地方,但它似乎並不是直接連接到集羣並找出正在發生的事情。 – narcilian

相關問題