From 4c6b27ad43cdf2e74792f28ef19f46b1ab126be9 Mon Sep 17 00:00:00 2001 From: brige Date: Tue, 29 Oct 2024 14:13:26 +0800 Subject: [PATCH] add sync queue --- utils/__init__.py | 2 +- utils/sync_queue.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 utils/sync_queue.py diff --git a/utils/__init__.py b/utils/__init__.py index 425ee71..1da2a48 100644 --- a/utils/__init__.py +++ b/utils/__init__.py @@ -1,6 +1,6 @@ #encoding = utf8 from .async_task_queue import AsyncTaskQueue +from .sync_queue import SyncQueue from .utils import mirror_index, load_model, get_device, load_avatar, config_logging from .audio_utils import melspectrogram, save_wav - diff --git a/utils/sync_queue.py b/utils/sync_queue.py new file mode 100644 index 0000000..8439b24 --- /dev/null +++ b/utils/sync_queue.py @@ -0,0 +1,32 @@ +#encoding = utf8 + +import threading +from queue import Queue + + +class SyncQueue: + def __init__(self, maxsize): + self._queue = Queue(maxsize) + self._condition = threading.Condition() + + def put(self, item): + with self._condition: + while self._queue.full(): + self._condition.wait() + self._queue.put(item) + self._condition.notify() + + def get(self): + with self._condition: + while self._queue.empty(): + self._condition.wait() + item = self._queue.get() + self._condition.notify() + return item + + def clear(self): + with self._condition: + while not self._queue.empty(): + self._queue.get() + self._queue.task_done() + self._condition.notify_all()