Skip to content
Snippets Groups Projects
Forked from DM / dm-docs
261 commits behind, 819 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
threadSafeQueue.py 981 B
#!/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