def __init__(self, startTime = None): """ Sets up the event queue, which is a dictionary using keys of the form int(time.time). The keys point to SortCacheLists, which store the events. """ self.queuedEvents = {} if startTime is None: startTime = Timing.mostAccurateTime() self.lastTime = startTime
def getNextEvents(self, currentTime=None): """ Returns the events which have yet to be executed and occur before currentTime. """ if currentTime is None: currentTime = Timing.mostAccurateTime() events = [] appendToEvents = events.append self._list.sort() for it in xrange(len(self._list)): if self._list[0].getTime() <= currentTime: appendToEvents(self._list.pop(0)) else: break return events
def getNextEvents(self, currentTime=None): """ Returns the events which have yet to be executed and occur before currentTime. """ if currentTime is None: currentTime = Timing.mostAccurateTime() events = [] appendToEventList = events.append for it in xrange(len(self.queue)): event = self.queue.pop() if currentTime >= event.getTime(): appendToEventList(event) else: # add event back to queue self.queue.append(event) break return events
def getNextEvents(self, currentTime=None): """ Returns the events which have yet to be executed and occur before currentTime. """ if currentTime is None: currentTime = Timing.mostAccurateTime() eventList = [] appendToEventList = eventList.append currentTimeIndex = int(currentTime) for timeIndex in xrange( int(self.lastTime), currentTimeIndex ): timeIndexEvents = self.queuedEvents.get(timeIndex,None) if timeIndexEvents is not None: timeIndexEvents.sort() for event in timeIndexEvents: appendToEventList(event) del self.queuedEvents[timeIndex] currentEvents = self.queuedEvents.get(currentTimeIndex,None) if currentEvents is not None: currentEvents.sort() for i in xrange(len(currentEvents)): event = currentEvents[0] if event.time <= currentTime: appendToEventList(currentEvents.pop(0)) else: break self.lastTime = currentTime return eventList
def getNextEvents(self, currentTime=None): """ Returns the events which have yet to be executed and occur before currentTime. """ if currentTime is None: currentTime = Timing.mostAccurateTime() events = [] queueEmptyFunc = self._queue.empty while not queueEmptyFunc(): event = self._queue.get_nowait() if event.getTime() <= currentTime: events.append(event) else: self._queue.put_nowait(event) break return events
def __init__(self, data=None, delay=0): self.time = Timing.mostAccurateTime()+delay self.data = data
def addEvent(self,event): timeDelay = event.getTime()-Timing.mostAccurateTime() if timeDelay >= 0: Timer(timeDelay,self.executedEvents.append,[event]).start()
def __init__(self, data=None, delay=0): self.time = Timing.mostAccurateTime()+delay self.data = data def getTime(self): return self.time def __cmp__(self, other): return self.time > other.time if __name__ == '__main__': import random startTime = currentTime = Timing.mostAccurateTime() delay = 5.250 eq=EventQueue2a(startTime) numEv=500 # add 500 events to the queue to execute after "delay" seconds. for t in xrange(numEv): eq.addEvent(TestEvent(delay=delay)) numEvents = 0 while numEvents < numEv: currentTime = Timing.mostAccurateTime() numEvents+=len(eq.getNextEvents(currentTime)) print 'Elapsed time: %.6f'%(currentTime-startTime)