我使用负载均衡视图提交任务。
我希望能够从不同的客户端连接,并通过提交的功能和参数查看剩余的任务。
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命令用于检索结果。
答案 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生成一些请求, 然后根据函数和参数重建和关联它们,这些函数和参数具有原始请求可能看起来像什么的先验知识。