def GenGraph(tname,args): """ generate the graph edges args, arguments as a string """ # extract the stubs from the args # iterate through the input queue and add new items to the stub list stubs = [] for item in args: l = simplejson.loads(item) stubs.extend(l) #print stubs print tname,stubs # randomize the items random.shuffle(stubs) #print tname + "-r",stubs # get the pairs pairs = zip(stubs[::2], stubs[1::2]) print tname,pairs # distribute the stubs randomly to the tasks tsize = comm.mgetconfig("tsize") # get edges for a specific task edges = {} for pair in pairs: esrc = pair[0] edst = pair[1] # add the edge twice for both directions tdst = esrc / tsize if not edges.has_key(tdst): edges[tdst] = [] l = [esrc, edst] edges[tdst].append(l) tdst = edst / tsize if not edges.has_key(tdst): edges[tdst] = [] l = [edst, esrc] edges[tdst].append(l) print tname,edges for key, value in edges.iteritems(): tdst = "E%s" % (str(key)) targs = simplejson.dumps(value) print tdst,targs comm.mroute(tname,tdst,targs)
def GenStubs(tname,args): """ determine degrees for all the nodes, generate the stubs and distribute them args, arguments as a string """ argwords = args[0] largs = argwords.split("\t") #print largs ns = int(largs[0]) ne = int(largs[1]) dis = largs[2] print "*task* %s %d %d %s" % (tname, ns, ne, dis) # determine node degrees i = ns ddeg = {} while i <= ne: deg = StdDist(distmean,distvar) ddeg[i] = deg print "*task* %s, node %s, degree %s" % (tname, str(i), str(deg)) i += 1 print ddeg # distribute the stubs randomly to the tasks ntasks = comm.mgetconfig("tasks") print "__tasks__ %s\t%s" % (tname, str(ntasks)) # one item per task, each task has a list of stubs dstubs = {} for key,value in ddeg.iteritems(): for i in range(0,value): t = int(random.random() * ntasks) if not dstubs.has_key(t): dstubs[t] = [] dstubs[t].append(key) for key, value in dstubs.iteritems(): tdst = "S%s" % (str(key)) targs = simplejson.dumps(value) print tdst,targs comm.mroute(tname,tdst,targs)