home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 56 / CDPowerplay56Disc2.iso / demos / blade / data1.cab / Program_Executable_Files / Lib / PythonLib / Queue.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2000-10-27  |  4.8 KB  |  151 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 1.5)
  3.  
  4.  
  5. try:
  6.     
  7.     class Empty(Exception):
  8.         pass
  9.  
  10. except TypeError:
  11.     Empty = 'Queue.Empty'
  12.  
  13.  
  14. class Queue:
  15.     
  16.     def __init__(self, maxsize):
  17.         '''Initialize a queue object with a given maximum size.
  18.  
  19.         If maxsize is <= 0, the queue size is infinite.
  20.         '''
  21.         import thread
  22.         self._init(maxsize)
  23.         self.mutex = thread.allocate_lock()
  24.         self.esema = thread.allocate_lock()
  25.         self.esema.acquire_lock()
  26.         self.fsema = thread.allocate_lock()
  27.  
  28.     
  29.     def qsize(self):
  30.         '''Returns the approximate size of the queue (not reliable!).'''
  31.         self.mutex.acquire_lock()
  32.         n = self._qsize()
  33.         self.mutex.release_lock()
  34.         return n
  35.  
  36.     
  37.     def empty(self):
  38.         '''Returns 1 if the queue is empty, 0 otherwise (not reliable!).'''
  39.         self.mutex.acquire_lock()
  40.         n = self._empty()
  41.         self.mutex.release_lock()
  42.         return n
  43.  
  44.     
  45.     def full(self):
  46.         '''Returns 1 if the queue is full, 0 otherwise (not reliable!).'''
  47.         self.mutex.acquire_lock()
  48.         n = self._full()
  49.         self.mutex.release_lock()
  50.         return n
  51.  
  52.     
  53.     def put(self, item):
  54.         '''Put an item into the queue.
  55.  
  56. \tIf the queue is full, block until a free slot is avaiable.
  57. \t'''
  58.         self.fsema.acquire_lock()
  59.         self.mutex.acquire_lock()
  60.         was_empty = self._empty()
  61.         self._put(item)
  62.         if was_empty:
  63.             self.esema.release_lock()
  64.         
  65.         if not self._full():
  66.             self.fsema.release_lock()
  67.         
  68.         self.mutex.release_lock()
  69.  
  70.     
  71.     def get(self):
  72.         '''Gets and returns an item from the queue.
  73.  
  74.         This method blocks if necessary until an item is available.
  75.         '''
  76.         self.esema.acquire_lock()
  77.         self.mutex.acquire_lock()
  78.         was_full = self._full()
  79.         item = self._get()
  80.         if was_full:
  81.             self.fsema.release_lock()
  82.         
  83.         if not self._empty():
  84.             self.esema.release_lock()
  85.         
  86.         self.mutex.release_lock()
  87.         return item
  88.  
  89.     
  90.     def get_nowait(self):
  91.         '''Gets and returns an item from the queue.
  92.  
  93.         Only gets an item if one is immediately available, Otherwise
  94.         this raises the Empty exception if the queue is empty or
  95.         temporarily unavailable.
  96.         '''
  97.         locked = self.esema.acquire_lock(0)
  98.         self.mutex.acquire_lock()
  99.         if self._empty():
  100.             self.mutex.release_lock()
  101.             raise Empty
  102.         
  103.         if not locked:
  104.             locked = self.esema.acquire_lock(0)
  105.             if not locked:
  106.                 self.mutex.release_lock()
  107.                 raise Empty
  108.             
  109.         
  110.         was_full = self._full()
  111.         item = self._get()
  112.         if was_full:
  113.             self.fsema.release_lock()
  114.         
  115.         if not self._empty():
  116.             self.esema.release_lock()
  117.         
  118.         self.mutex.release_lock()
  119.         return item
  120.  
  121.     
  122.     def _init(self, maxsize):
  123.         self.maxsize = maxsize
  124.         self.queue = []
  125.  
  126.     
  127.     def _qsize(self):
  128.         return len(self.queue)
  129.  
  130.     
  131.     def _empty(self):
  132.         return not (self.queue)
  133.  
  134.     
  135.     def _full(self):
  136.         if self.maxsize > 0:
  137.             pass
  138.         return len(self.queue) == self.maxsize
  139.  
  140.     
  141.     def _put(self, item):
  142.         self.queue.append(item)
  143.  
  144.     
  145.     def _get(self):
  146.         item = self.queue[0]
  147.         del self.queue[0]
  148.         return item
  149.  
  150.  
  151.