| import threading |
| import time |
| |
| class LocalQueue(): |
| ops = 0 |
| stored = 0 |
| uid = 0 |
| empty = 0 |
| |
| def __init__(self, name='unnamed'): |
| self.items = [] |
| self.name = name |
| self.uid = LocalQueue.uid |
| LocalQueue.uid += 1 |
| |
| def put(self, item, block=True): |
| LocalQueue.ops += 1 |
| LocalQueue.stored += 1 |
| self.items.append(item) |
| |
| def get(self, block=True, timeout=0): |
| # TODO(VitalyFedyunin): Add support of block and timeout arguments |
| LocalQueue.ops += 1 |
| if not len(self.items): |
| LocalQueue.empty += 1 |
| raise Exception('LocalQueue is empty') |
| LocalQueue.stored -= 1 |
| return self.items.pop() |
| |
| |
| class ThreadingQueue(): |
| def __init__(self, name='unnamed'): |
| self.lock = threading.Lock() |
| self.items = [] |
| self.name = name |
| |
| def put(self, item, block=True): |
| with self.lock: |
| self.items.append(item) |
| |
| def get(self, block=True, timeout=0): |
| # TODO(VitalyFedyunin): Add support of block and timeout arguments |
| while True: |
| with self.lock: |
| if len(self.items) > 0: |
| return self.items.pop() |
| if not block: |
| raise Exception("Not available") |
| # TODO(VitalyFedyunin): Figure out what to do if nothing in the queue |
| time.sleep(0.000001) |