#!/usr/bin/env python import threading class ThreadSafeQueue: def __init__(self): self.lock = threading.RLock() self.queue = [] def push(self, item): self.lock.acquire() try: self.queue.insert(0,item) finally: self.lock.release() def pop(self): # Return None if work queue is empty. self.lock.acquire() try: item = None if len(self.queue): item = self.queue.pop() return item finally: self.lock.release() def getLength(self): return len(self.queue) def isEmpty(self): return len(self.queue) == 0 #################################################################### # Testing if __name__ == '__main__': q = ThreadSafeQueue() for i in range(0,10): q.push(i) print 'Added: ', i while not q.isEmpty(): i = q.pop() print 'Got: ', i