home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / Calibre / calibre-0.8.18.msi / file_262 / sched.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-09-09  |  1.9 KB  |  64 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.7)
  3.  
  4. import heapq
  5. from collections import namedtuple
  6. __all__ = [
  7.     'scheduler']
  8. Event = namedtuple('Event', 'time, priority, action, argument')
  9.  
  10. class scheduler:
  11.     
  12.     def __init__(self, timefunc, delayfunc):
  13.         self._queue = []
  14.         self.timefunc = timefunc
  15.         self.delayfunc = delayfunc
  16.  
  17.     
  18.     def enterabs(self, time, priority, action, argument):
  19.         event = Event(time, priority, action, argument)
  20.         heapq.heappush(self._queue, event)
  21.         return event
  22.  
  23.     
  24.     def enter(self, delay, priority, action, argument):
  25.         time = self.timefunc() + delay
  26.         return self.enterabs(time, priority, action, argument)
  27.  
  28.     
  29.     def cancel(self, event):
  30.         self._queue.remove(event)
  31.         heapq.heapify(self._queue)
  32.  
  33.     
  34.     def empty(self):
  35.         return not (self._queue)
  36.  
  37.     
  38.     def run(self):
  39.         q = self._queue
  40.         delayfunc = self.delayfunc
  41.         timefunc = self.timefunc
  42.         pop = heapq.heappop
  43.         while q:
  44.             (time, priority, action, argument) = checked_event = q[0]
  45.             now = timefunc()
  46.             if now < time:
  47.                 delayfunc(time - now)
  48.                 continue
  49.             event = pop(q)
  50.             if event is checked_event:
  51.                 action(*argument)
  52.                 delayfunc(0)
  53.                 continue
  54.             heapq.heappush(q, event)
  55.  
  56.     
  57.     def queue(self):
  58.         events = self._queue[:]
  59.         return map(heapq.heappop, [
  60.             events] * len(events))
  61.  
  62.     queue = property(queue)
  63.  
  64.