def _broadcast(v): def _deliver(j): buffers[j].put((i,v)) for j in range(N): greenletPacker(Greenlet(_deliver, j), 'random_delay_acs._deliver', (N, t, inputs)).start_later(random.random()*maxdelay)
def _broadcast(v): def _deliver(j): buffers[j].put((i, v)) for j in range(N): greenletPacker( Greenlet(_deliver, j), 'random_delay_acs._deliver', (N, t, inputs)).start_later(random.random() * maxdelay)
def random_delay_acs(N, t, inputs): assert (isinstance(inputs, list)) maxdelay = 0.01 # Instantiate the "broadcast" instruction def makeBroadcast(i): def _broadcast(v): def _deliver(j): buffers[j].put((i, v)) for j in range(N): greenletPacker( Greenlet(_deliver, j), 'random_delay_acs._deliver', (N, t, inputs)).start_later(random.random() * maxdelay) return _broadcast def modifyMonitoredInt(monitoredInt): monitoredInt.data = 1 while True: initBeforeBinaryConsensus() buffers = map(lambda _: Queue(1), range(N)) ts = [] for i in range(N): bc = makeBroadcast(i) recv = buffers[i].get input_clone = [MonitoredInt() for _ in range(N)] for j in range(N): greenletPacker(Greenlet(modifyMonitoredInt, input_clone[j]), 'random_delay_acs.modifyMonitoredInt', (N, t, inputs)).start_later(maxdelay * random.random()) th = greenletPacker(Greenlet(acs, i, N, t, input_clone, bc, recv), 'random_delay_acs.acs', (N, t, inputs)) th.start( ) # start_later(random.random() * maxdelay) is not necessary here ts.append(th) #if True: try: gevent.joinall(ts) break except gevent.hub.LoopExit: # Manual fix for early stop print "End"
def random_delay_acs(N, t, inputs): assert(isinstance(inputs, list)) maxdelay = 0.01 # Instantiate the "broadcast" instruction def makeBroadcast(i): def _broadcast(v): def _deliver(j): buffers[j].put((i,v)) for j in range(N): greenletPacker(Greenlet(_deliver, j), 'random_delay_acs._deliver', (N, t, inputs)).start_later(random.random()*maxdelay) return _broadcast def modifyMonitoredInt(monitoredInt): monitoredInt.data = 1 while True: initBeforeBinaryConsensus() buffers = map(lambda _: Queue(1), range(N)) ts = [] for i in range(N): bc = makeBroadcast(i) recv = buffers[i].get input_clone = [MonitoredInt() for _ in range(N)] for j in range(N): greenletPacker(Greenlet(modifyMonitoredInt, input_clone[j]), 'random_delay_acs.modifyMonitoredInt', (N, t, inputs)).start_later(maxdelay * random.random()) th = greenletPacker(Greenlet(acs, i, N, t, input_clone, bc, recv), 'random_delay_acs.acs', (N, t, inputs)) th.start() # start_later(random.random() * maxdelay) is not necessary here ts.append(th) #if True: try: gevent.joinall(ts) break except gevent.hub.LoopExit: # Manual fix for early stop print "End"