1

Load Balanced View を使用してタスクを送信しています。

別のクライアントから接続して、送信された関数とパラメーターによって残りのタスクを表示できるようにしたいと考えています。

例えば:

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 に関連付けられた関数とパラメーターをどのように把握できるかということです。

4

1 に答える 1

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)

これから、関数と引数に基づいてタスクを関連付けることができるはずです。

1 つの注意点: f は酸洗されているため、多くの場合、比較f is original_fは False になりますf.__module__ + f.__name__

もう少し詳しく説明すると、いくつかのリクエストを生成し、元のリクエストがどのように見えるかについて事前に知っている関数と引数に基づいて、リクエストを再構築して関連付ける例を次に示します。

于 2012-12-16T22:50:20.037 に答える