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

    print "GetDist", tname

    task = tname
    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
        for tn, args in dtasks.iteritems():
            dmsg = {}
            dmsg["task"] = task
            dmsg["nodes"] = args
            tdst = "E%s" % (str(tn))
            targs = simplejson.dumps(dmsg)
            print tdst, targs
            comm.mroute(tname, tdst, targs)

        # wait for another iteration
        yield

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

        # end of while, repeat the loop

    #print "*finish*", tname, visited
    dist = {}
    for key, value in visited.iteritems():
        if not dist.has_key(value):
            dist[value] = []
        dist[value].append(key)

    for key, value in dist.iteritems():
        value.sort()
    #print "*finish1*", tname, dist

    distance = 0
    compsize = 0
    while dist.has_key(distance):
        print "*dist*", distance, len(dist[distance])
        #print "*dist*", distance, len(dist[distance]), dist[distance]
        compsize += len(dist[distance])
        distance += 1

    print "*distall*", distance, compsize
    return
Beispiel #2
0
def GetDist(tname,step,args):
    """
    find the node distance
        args, arguments as a string
    """

    print "GetDist", tname

    task = tname
    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
        for tn,args in dtasks.iteritems():
            dmsg = {}
            dmsg["task"] = task
            dmsg["nodes"] = args
            tdst = "E%s" % (str(tn))
            targs = simplejson.dumps(dmsg)
            print tdst,targs
            comm.mroute(tname,tdst,targs)

        # wait for another iteration
        yield

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

        # end of while, repeat the loop

    #print "*finish*", tname, visited
    dist = {}
    for key,value in visited.iteritems():
        if not dist.has_key(value):
            dist[value] = []
        dist[value].append(key)

    for key,value in dist.iteritems():
        value.sort()
    #print "*finish1*", tname, dist

    distance = 0
    compsize = 0
    while dist.has_key(distance):
        print "*dist*", distance, len(dist[distance])
        #print "*dist*", distance, len(dist[distance]), dist[distance]
        compsize += len(dist[distance])
        distance += 1

    print "*distall*", distance, compsize
    return
Beispiel #3
0
def GenNbr(tname, step, args):
    """
    generate the graph neighbors
        args, arguments as a string
    """

    task = tname

    # 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
    tdst = "D%s" % (str(nsel))
    dmsg = {}
    dmsg["node"] = nsel
    dmsg["nbrs"] = list(nbrs[nsel])
    targs = simplejson.dumps(dmsg)
    print tdst, targs
    comm.mroute(tname, tdst, targs)

    while True:
        yield

        args = comm.mgetargs(tname)
        if args == None:
            continue

        # iterate through the input queue, get the nodes, report neighbors
        for item in args:
            d = simplejson.loads(item)
            tdst = d["task"]
            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))
                print tdst, targs
                comm.mroute(tname, tdst, targs)
Beispiel #4
0
def GenNbr(tname,step,args):
    """
    generate the graph neighbors
        args, arguments as a string
    """

    task = tname

    # 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
    tdst = "D%s" % (str(nsel))
    dmsg = {}
    dmsg["node"] = nsel
    dmsg["nbrs"] = list(nbrs[nsel])
    targs = simplejson.dumps(dmsg)
    print tdst,targs
    comm.mroute(tname,tdst,targs)

    while True:
        yield

        args = comm.mgetargs(tname)
        if args == None:
            continue

        # iterate through the input queue, get the nodes, report neighbors
        for item in args:
            d = simplejson.loads(item)
            tdst = d["task"]
            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))
                print tdst,targs
                comm.mroute(tname,tdst,targs)