human/utils/sync_queue.py
2024-10-30 16:34:12 +08:00

58 lines
1.4 KiB
Python

#encoding = utf8
import threading
from queue import Queue
'''
class SyncQueue:
def __init__(self, maxsize):
self._queue = Queue(maxsize)
# self._queue = Queue()
self._condition = threading.Condition()
def put(self, item):
# self._queue.put(item)
with self._condition:
while self._queue.full():
print('put wait')
self._condition.wait()
self._queue.put(item)
self._condition.notify()
def get(self):
# return self._queue.get(block=True, timeout=0.01)
with self._condition:
while self._queue.empty():
self._condition.wait()
item = self._queue.get()
self._condition.notify()
return item
def clear(self):
# self._queue.queue.clear()
with self._condition:
while not self._queue.empty():
self._queue.queue.clear()
self._condition.notify_all()
def size(self):
return self._queue.qsize()
'''
class SyncQueue:
def __init__(self, maxsize):
self._queue = Queue()
def put(self, item):
self._queue.put(item)
def get(self):
return self._queue.get(block=True, timeout=0.2)
def clear(self):
self._queue.queue.clear()
def size(self):
return self._queue.qsize()