class_docstr: Listener of ML tasks queue and tasks executioner.
  Each new message waited and executed in separate thread.
  
  Attributes:
      _ready_event (Event): set if ready to start new queue listen thread
      _stop_event (Event): set if need to stop all threads/processes
      cpu_stat (list[float]): CPU usage statistic. Each value is 0-100 float representing CPU usage in %
      _collect_cpu_stat_thread (Thread): pointer to thread that collecting CPU usage statistic
      _listen_message_threads (list[Thread]): list of pointers to threads where queue messages are listening/processing
      db (Redis): database object
      cache: redis cache abstrtaction
      consumer_group: redis consumer group object
docstr: Start new listen thread each time when _ready_event is set
          
docstr_tok: ["Start","new","listen","thread","each","time","when","_ready_event","is","set"]
code: def run(self) -> None:
      """Start new listen thread each time when _ready_event is set"""
      self._ready_event.set()
      while self._stop_event.is_set() is False:
          self._ready_event.wait(timeout=1)
          if self._ready_event.is_set() is False:
              continue
          self._ready_event.clear()
          threading.Thread(target=self._listen).start()
      self.stop()
  
imports: import os
  import time
  import signal
  import tempfile
  import threading
  from pathlib import Path
  from functools import wraps
  from collections.abc import Callable
  import psutil
  from walrus import Database
  from pandas import DataFrame
  from redis.exceptions import ConnectionError
  from mindsdb.utilities.config import Config
  from mindsdb.utilities.context import context
  from mindsdb.integrations.libs.process_cache import process_cache
  from mindsdb.utilities.ml_task_queue.utils import RedisKey, StatusNotifier, to_bytes, from_bytes
  from mindsdb.utilities.ml_task_queue.base import BaseRedisQueue
  from mindsdb.utilities.fs import clean_unlinked_process_marks
  from mindsdb.utilities.functions import mark_process
  from mindsdb.utilities.ml_task_queue.const import ML_TASK_TYPE, ML_TASK_STATUS, TASKS_STREAM_NAME, TASKS_STREAM_CONSUMER_NAME, TASKS_STREAM_CONSUMER_GROUP_NAME
  from mindsdb.utilities import log
label_desc: Use image node_id 6 for calling the MLTaskConsumer obj's underlying member method code with example usage: obj.run() without return types