human/render/base_render.py

52 lines
1.2 KiB
Python
Raw Normal View History

2024-10-12 11:57:24 +00:00
#encoding = utf8
2024-10-22 11:57:30 +00:00
import logging
import time
2024-10-12 11:57:24 +00:00
from abc import ABC, abstractmethod
2024-10-22 11:57:30 +00:00
from queue import Queue
from threading import Event, Thread
2024-10-29 10:09:26 +00:00
from utils import SyncQueue
2024-10-22 11:57:30 +00:00
logger = logging.getLogger(__name__)
2024-10-12 11:57:24 +00:00
class BaseRender(ABC):
2024-10-25 00:23:55 +00:00
def __init__(self, play_clock, context, type_, delay=0.02):
2024-10-22 11:57:30 +00:00
self._play_clock = play_clock
2024-10-25 00:23:55 +00:00
self._context = context
self._type = type_
2024-10-23 09:44:33 +00:00
self._delay = delay
2024-10-30 08:34:12 +00:00
self._queue = SyncQueue(context.batch_size)
2024-10-22 11:57:30 +00:00
self._exit_event = Event()
self._thread = Thread(target=self._on_run)
self._exit_event.set()
self._thread.start()
def _on_run(self):
2024-10-25 00:23:55 +00:00
logging.info(f'{self._type} render run')
2024-10-22 11:57:30 +00:00
while self._exit_event.is_set():
2024-10-23 09:44:33 +00:00
self._run_step()
time.sleep(self._delay)
2024-10-22 11:57:30 +00:00
2024-10-25 00:23:55 +00:00
logging.info(f'{self._type} render exit')
2024-10-21 11:55:04 +00:00
2024-10-25 00:23:55 +00:00
def put(self, frame, ps):
2024-10-29 10:09:26 +00:00
self._queue.put((frame, ps))
2024-10-21 11:55:04 +00:00
2024-10-24 00:53:11 +00:00
def size(self):
2024-10-29 10:09:26 +00:00
return self._queue.size()
2024-10-24 00:53:11 +00:00
2024-10-23 11:58:41 +00:00
def pause_talk(self):
2024-10-29 10:09:26 +00:00
self._queue.clear()
2024-10-23 11:58:41 +00:00
2024-10-21 11:55:04 +00:00
def stop(self):
2024-10-29 10:09:26 +00:00
self._queue.clear()
2024-10-22 11:57:30 +00:00
self._exit_event.clear()
self._thread.join()
@abstractmethod
2024-10-23 09:44:33 +00:00
def _run_step(self):
2024-10-12 11:57:24 +00:00
pass