class_docstr: This is where tuners and assessors are not defined yet.
  Inherits this class to make your own advisor.
  
  .. note::
  
      The class inheriting MsgDispatcherBase should be instantiated
      after nnimanager (rest server) is started, so that the object
      is ready to use right after its instantiation.
class_docstr_tok: ["This","is","where","tuners","and","assessors","are","not","defined","yet",".","Inherits","this","class","to","make","your","own","advisor",".","..","note",":",":","The","class","inheriting","MsgDispatcherBase","should","be","instantiated","after","nnimanager","(","rest","server",")","is","started",",","so","that","the","object","is","ready","to","use","right","after","its","instantiation","."]
docstr: Called when metric data is reported or new parameters are requested (for multiphase).
  When new parameters are requested, this method should send a new parameter.
  
  Parameters
  ----------
  data: dict
      a dict which contains 'parameter_id', 'value', 'trial_job_id', 'type', 'sequence'.
      type: can be `MetricType.REQUEST_PARAMETER`, `MetricType.FINAL` or `MetricType.PERIODICAL`.
      `REQUEST_PARAMETER` is used to request new parameters for multiphase trial job. In this case,
      the dict will contain additional keys: `trial_job_id`, `parameter_index`. Refer to `msg_dispatcher.py`
      as an example.
  
  Raises
  ------
  ValueError
      Data type is not supported
docstr_tok: ["Called","when","metric","data","is","reported","or","new","parameters","are","requested","(","for","multiphase",")",".","When","new","parameters","are","requested",",","this","method","should","send","a","new","parameter",".","Parameters","--","--","--","--","--","data",":","dict","a","dict","which","contains","'parameter_id","'",",","'value","'",",","'trial_job_id","'",",","'type","'",",","'sequence","'",".","type",":","can","be","`","MetricType.REQUEST_PARAMETER","`",",","`","MetricType.FINAL","`","or","`","MetricType.PERIODICAL","`",".","`","REQUEST_PARAMETER","`","is","used","to","request","new","parameters","for","multiphase","trial","job",".","In","this","case",",","the","dict","will","contain","additional","keys",":","`","trial_job_id","`",",","`","parameter_index","`",".","Refer","to","`","msg_dispatcher.py","`","as","an","example",".","Raises","--","--","--","ValueError","Data","type","is","not","supported"]
code: def handle_report_metric_data(self, data):
      """Called when metric data is reported or new parameters are requested (for multiphase).
      When new parameters are requested, this method should send a new parameter.
  
      Parameters
      ----------
      data: dict
          a dict which contains 'parameter_id', 'value', 'trial_job_id', 'type', 'sequence'.
          type: can be `MetricType.REQUEST_PARAMETER`, `MetricType.FINAL` or `MetricType.PERIODICAL`.
          `REQUEST_PARAMETER` is used to request new parameters for multiphase trial job. In this case,
          the dict will contain additional keys: `trial_job_id`, `parameter_index`. Refer to `msg_dispatcher.py`
          as an example.
  
      Raises
      ------
      ValueError
          Data type is not supported
      """
      raise NotImplementedError(
          "handle_report_metric_data not implemented"
      )
  
imports: import threading
  import logging
  from queue import Queue, Empty
  from .env_vars import dispatcher_env_vars
  from ..common import load
  from ..recoverable import Recoverable
  from .tuner_command_channel import CommandType, TunerCommandChannel
label_desc: Use image node_id 14 for calling the MsgDispatcherBase obj's underlying member method code with example usage: obj.handle_report_metric_data(data) without return types