diff options
| author | Guido van Rossum <guido@python.org> | 1997-09-09 03:42:09 (GMT) |
|---|---|---|
| committer | Guido van Rossum <guido@python.org> | 1997-09-09 03:42:09 (GMT) |
| commit | 5c1f5bd5f64c2c60afa5221862fd220cd086c5c8 (patch) | |
| tree | 3bdb31396ddd2db733b6e216345900279a5b695f /Lib/dos_8x3/queue.py | |
| parent | d7500fcbb4d0257f3bcd0c87d17ee61f3b1545e8 (diff) | |
| download | cpython-5c1f5bd5f64c2c60afa5221862fd220cd086c5c8.zip cpython-5c1f5bd5f64c2c60afa5221862fd220cd086c5c8.tar.gz cpython-5c1f5bd5f64c2c60afa5221862fd220cd086c5c8.tar.bz2 | |
Renamed dos_8x3 to dos-8x3.
Diffstat (limited to 'Lib/dos_8x3/queue.py')
| -rwxr-xr-x | Lib/dos_8x3/queue.py | 121 |
1 files changed, 0 insertions, 121 deletions
diff --git a/Lib/dos_8x3/queue.py b/Lib/dos_8x3/queue.py deleted file mode 100755 index 5125fd5..0000000 --- a/Lib/dos_8x3/queue.py +++ /dev/null @@ -1,121 +0,0 @@ -# A multi-producer, multi-consumer queue. - -Empty = 'Queue.Empty' # Exception raised by get_nowait() - -class Queue: - - # Initialize a queue object with a given maximum size - # (If maxsize is <= 0, the maximum size is infinite) - def __init__(self, maxsize): - import thread - self._init(maxsize) - self.mutex = thread.allocate_lock() - self.esema = thread.allocate_lock() - self.esema.acquire_lock() - self.fsema = thread.allocate_lock() - - # Get an approximation of the queue size (not reliable!) - def qsize(self): - self.mutex.acquire_lock() - n = self._qsize() - self.mutex.release_lock() - return n - - # Check if the queue is empty (not reliable!) - def empty(self): - self.mutex.acquire_lock() - n = self._empty() - self.mutex.release_lock() - return n - - # Check if the queue is full (not reliable!) - def full(self): - self.mutex.acquire_lock() - n = self._full() - self.mutex.release_lock() - return n - - # Put a new item into the queue - def put(self, item): - self.fsema.acquire_lock() - self.mutex.acquire_lock() - was_empty = self._empty() - self._put(item) - if was_empty: - self.esema.release_lock() - if not self._full(): - self.fsema.release_lock() - self.mutex.release_lock() - - # Get an item from the queue, - # blocking if necessary until one is available - def get(self): - self.esema.acquire_lock() - self.mutex.acquire_lock() - was_full = self._full() - item = self._get() - if was_full: - self.fsema.release_lock() - if not self._empty(): - self.esema.release_lock() - self.mutex.release_lock() - return item - - # Get an item from the queue if one is immediately available, - # raise Empty if the queue is empty or temporarily unavailable - def get_nowait(self): - locked = self.esema.acquire_lock(0) - self.mutex.acquire_lock() - if self._empty(): - # The queue is empyt -- we can't have esema - self.mutex.release_lock() - raise Empty - if not locked: - locked = self.esema.acquire_lock(0) - if not locked: - # Somebody else has esema - # but we have mutex -- - # go out of their way - self.mutex.release_lock() - raise Empty - was_full = self._full() - item = self._get() - if was_full: - self.fsema.release_lock() - if not self._empty(): - self.esema.release_lock() - self.mutex.release_lock() - return item - - # XXX Need to define put_nowait() as well. - - - # Override these methods to implement other queue organizations - # (e.g. stack or priority queue). - # These will only be called with appropriate locks held - - # Initialize the queue representation - def _init(self, maxsize): - self.maxsize = maxsize - self.queue = [] - - def _qsize(self): - return len(self.queue) - - # Check wheter the queue is empty - def _empty(self): - return not self.queue - - # Check whether the queue is full - def _full(self): - return self.maxsize > 0 and len(self.queue) == self.maxsize - - # Put a new item in the queue - def _put(self, item): - self.queue.append(item) - - # Get an item from the queue - def _get(self): - item = self.queue[0] - del self.queue[0] - return item |
