Example #1
0
def GetDist(tname,args):
    """
    find the node distance
        args, arguments as a string
    """

    print "GetDist", tname

    task = tname.split("-")[0]
    step = int(tname.split("-")[1])
    tsize = comm.mgetconfig("tsize")

    # get the initial arguments: starting node and its neighbors
    dinit = simplejson.loads(args[0])
    node = dinit["node"]
    nbrlist = dinit["nbrs"]

    # no visited nodes yet, first iteration
    visited = {}
    distance = 0
    print "*distance*", tname, node, distance
    visited[node] = distance

    while True:

        # process the new neighbors
        distance += 1
        newnodes = []

        # process all the input elements
        for arg in args:
            dinit = simplejson.loads(arg)
            srcnode = dinit["node"]
            nbrlist = dinit["nbrs"]

            for item in nbrlist:
                # skip nodes already visited
                if item in visited:
                    continue
    
                # add new nodes to the visited nodes and the new nodes
                print "*distance*", tname, item, distance
                visited[item] = distance
                newnodes.append(item)
    
        # done, if there are no more new nodes
        if len(newnodes) <= 0:
            break

        # send new visited nodes to the graph nodes to find their neighbors
    
        # collect nodes for the same task
        dtasks = {}
        for ndst in newnodes:
            tn = TaskId(ndst,tsize)
            if not dtasks.has_key(tn):
                dtasks[tn] = []
            dtasks[tn].append(ndst)

        print "dtasks", dtasks
    
        # send the messages
        step += 1
        for tn,args in dtasks.iteritems():
            dmsg = {}
            dmsg["task"] = task
            dmsg["nodes"] = args
            tdst = "E%s" % (str(tn)) + "-" + str(step)
            targs = simplejson.dumps(dmsg)
            print tdst,targs
            comm.mroute(tname,tdst,targs)

        # wait for another iteration
        yield

        # move the task name to the next step
        step += 1
        tname = task + "-" + str(step)

        # get the input queue
        args = comm.mgetargs(tname)

        # end of while, repeat the loop

    print "*finish*", tname

    # TODO calculate statistics
    return
Example #2
0
def GetDist(tname, args):
    """
    find the node distance
        args, arguments as a string
    """

    print "GetDist", tname

    task = tname.split("-")[0]
    step = int(tname.split("-")[1])
    tsize = comm.mgetconfig("tsize")

    # get the initial arguments: starting node and its neighbors
    dinit = simplejson.loads(args[0])
    node = dinit["node"]
    nbrlist = dinit["nbrs"]

    # no visited nodes yet, first iteration
    visited = {}
    distance = 0
    print "*distance*", tname, node, distance
    visited[node] = distance

    while True:

        # process the new neighbors
        distance += 1
        newnodes = []

        # process all the input elements
        for arg in args:
            dinit = simplejson.loads(arg)
            srcnode = dinit["node"]
            nbrlist = dinit["nbrs"]

            for item in nbrlist:
                # skip nodes already visited
                if item in visited:
                    continue

                # add new nodes to the visited nodes and the new nodes
                print "*distance*", tname, item, distance
                visited[item] = distance
                newnodes.append(item)

        # done, if there are no more new nodes
        if len(newnodes) <= 0:
            break

        # send new visited nodes to the graph nodes to find their neighbors

        # collect nodes for the same task
        dtasks = {}
        for ndst in newnodes:
            tn = TaskId(ndst, tsize)
            if not dtasks.has_key(tn):
                dtasks[tn] = []
            dtasks[tn].append(ndst)

        print "dtasks", dtasks

        # send the messages
        step += 1
        for tn, args in dtasks.iteritems():
            dmsg = {}
            dmsg["task"] = task
            dmsg["nodes"] = args
            tdst = "E%s" % (str(tn)) + "-" + str(step)
            targs = simplejson.dumps(dmsg)
            print tdst, targs
            comm.mroute(tname, tdst, targs)

        # wait for another iteration
        yield

        # move the task name to the next step
        step += 1
        tname = task + "-" + str(step)

        # get the input queue
        args = comm.mgetargs(tname)

        # end of while, repeat the loop

    print "*finish*", tname

    # TODO calculate statistics
    return
Example #3
0
def GenNbr(tname,args):
    """
    generate the graph neighbors
        args, arguments as a string
    """

    task = tname.split("-")[0]
    step = int(tname.split("-")[1])

    # extract neighbors from the args
    # iterate through the input queue and add new items to the neighbor list
    edges = []
    for item in args:
        l = simplejson.loads(item)
        edges.extend(l)
    print edges
    print tname,edges

    # collect neighbors for each node
    nbrs = {}
    for item in edges:
        src = item[0]
        dst = item[1]
        if not nbrs.has_key(src):
            nbrs[src] = set()
        nbrs[src].add(dst)

    for node, edges in nbrs.iteritems():
        print tname, node, edges

    # select a random node for stats
    #nsel = random.choice(list(nbrs.keys()))
    nsel = list(nbrs.keys())[0]
    print tname, "sel", nsel, list(nbrs.keys())

    # send the node and its neighbors to the distance task
    step += 1
    tdst = "D%s" % (str(nsel)) + "-" + str(step)
    dmsg = {}
    dmsg["node"] = nsel
    dmsg["nbrs"] = list(nbrs[nsel])
    targs = simplejson.dumps(dmsg)
    print tdst,targs
    comm.mroute(tname,tdst,targs)

    while True:
        yield

        step += 1
        tname = task + "-" + str(step)
        args = comm.mgetargs(tname)
        if args == None:
            step += 1
            continue

        # iterate through the input queue, get the nodes, report neighbors
        step += 1
        for item in args:
            d = simplejson.loads(item)
            tdst = d["task"] + "-" + str(step)
            nodes = d["nodes"]
            for node in nodes:
                dmsg = {}
                dmsg["node"] = node
                dmsg["nbrs"] = list(nbrs[node])
                targs = simplejson.dumps(dmsg)
                #tdst = "D%s" % (str(node)) + "-" + str(step)
                print tdst,targs
                comm.mroute(tname,tdst,targs)
Example #4
0
def GenNbr(tname, args):
    """
    generate the graph neighbors
        args, arguments as a string
    """

    task = tname.split("-")[0]
    step = int(tname.split("-")[1])

    # extract neighbors from the args
    # iterate through the input queue and add new items to the neighbor list
    edges = []
    for item in args:
        l = simplejson.loads(item)
        edges.extend(l)
    print edges
    print tname, edges

    # collect neighbors for each node
    nbrs = {}
    for item in edges:
        src = item[0]
        dst = item[1]
        if not nbrs.has_key(src):
            nbrs[src] = set()
        nbrs[src].add(dst)

    for node, edges in nbrs.iteritems():
        print tname, node, edges

    # select a random node for stats
    #nsel = random.choice(list(nbrs.keys()))
    nsel = list(nbrs.keys())[0]
    print tname, "sel", nsel, list(nbrs.keys())

    # send the node and its neighbors to the distance task
    step += 1
    tdst = "D%s" % (str(nsel)) + "-" + str(step)
    dmsg = {}
    dmsg["node"] = nsel
    dmsg["nbrs"] = list(nbrs[nsel])
    targs = simplejson.dumps(dmsg)
    print tdst, targs
    comm.mroute(tname, tdst, targs)

    while True:
        yield

        step += 1
        tname = task + "-" + str(step)
        args = comm.mgetargs(tname)
        if args == None:
            step += 1
            continue

        # iterate through the input queue, get the nodes, report neighbors
        step += 1
        for item in args:
            d = simplejson.loads(item)
            tdst = d["task"] + "-" + str(step)
            nodes = d["nodes"]
            for node in nodes:
                dmsg = {}
                dmsg["node"] = node
                dmsg["nbrs"] = list(nbrs[node])
                targs = simplejson.dumps(dmsg)
                #tdst = "D%s" % (str(node)) + "-" + str(step)
                print tdst, targs
                comm.mroute(tname, tdst, targs)