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