如何使用IPython Parallel查看已提交任务的详细信息?

时间:2012-12-15 21:48:31

标签: parallel-processing ipython

我使用负载均衡视图提交任务。

我希望能够从不同的客户端连接,并通过提交的功能和参数查看剩余的任务。

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和客户端,我怎么能找出与msg_id相关的函数和参数。 get_result命令用于检索结果。

1 个答案:

答案 0 :(得分:1)

这些东西被腌制,并存储在集线器数据库的“缓冲区”中。如果你想查看它们,你必须从数据库中获取这些缓冲区,并解压缩它们。

假设你有一个msg_ids列表,这里有一种方法可以为所有这些请求重建f,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)

由此,您应该能够根据其功能和参数来关联任务。

一个警告:由于f经过酸洗,因此比较f is original_f通常为假,因此您必须进行更宽松的比较,例如f.__module__ + f.__name__或类似的。

有关详细信息,here is an example生成一些请求, 然后根据函数和参数重建和关联它们,这些函数和参数具有原始请求可能看起来像什么的先验知识。