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
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
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)
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)