code: def _send_values(self, queued_channels_values):
      def get_channel_metadata(value):
          return (
              value.channel_id,
              value.channel_name,
              value.channel_type,
              value.channel_namespace,
          )
  
      queued_grouped_by_channel = {
          channel_metadata: list(values)
          for channel_metadata, values in groupby(
              sorted(queued_channels_values, key=get_channel_metadata),
              get_channel_metadata,
          )
      }
      channels_with_values = []
      for channel_metadata in queued_grouped_by_channel:
          channel_values = []
          for queued_value in queued_grouped_by_channel[
              channel_metadata
          ]:
              channel_values.append(
                  ChannelValue(
                      ts=queued_value.channel_value.ts,
                      x=queued_value.channel_value.x,
                      y=queued_value.channel_value.y,
                  )
              )
          channels_with_values.append(
              ChannelIdWithValues(*channel_metadata, channel_values)
          )
  
      try:
          self._experiment._send_channels_values(channels_with_values)
      except HTTPUnprocessableEntity as e:
          message = "Maximum storage limit reached"
          try:
              message = e.response.json()["message"]
          finally:
              _logger.warning(
                  "Failed to send channel value: %s", message
              )
      except (NeptuneException, IOError):
          _logger.exception("Failed to send channel value.")
  
imports: import logging
  import threading
  import time
  from collections import namedtuple
  from itertools import groupby
  from queue import Empty, Queue
  from bravado.exception import HTTPUnprocessableEntity
  from neptune.legacy.exceptions import NeptuneException
  from neptune.legacy.internal.channels.channels import ChannelIdWithValues, ChannelNamespace, ChannelType, ChannelValue
  from neptune.legacy.internal.threads.neptune_thread import NeptuneThread
label_desc: Use image node_id 4 for calling the ChannelsValuesSendingThread obj's underlying member method code with example usage: obj._send_values(queued_channels_values) and returns: value,  value,  value,  value