|
|
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): |
|
|
|
|
|
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): |
|
|
|
|
|
while True: |
|
|
with self.lock: |
|
|
if len(self.items) > 0: |
|
|
return self.items.pop() |
|
|
if not block: |
|
|
raise Exception("Not available") |
|
|
|
|
|
time.sleep(0.000001) |
|
|
|