code: def send(self, body, content_type='application/ubjson', timeout=5):
          
          if self.__send_ready.wait(timeout):
              try:
                  with self.__send_lock:
                      # access denied response might be received inside send thread rather than here how to best handle?
                      self.__send_channel.basic_publish(msg=Message(body, delivery_mode=2, content_type=content_type),
                                                        exchange=self.__epid)
              except exceptions.AccessRefused as exc:
                  raise_from(LinkException('Access denied'), exc)
              except (exceptions.AMQPError, SocketError) as exc:
                  raise_from(LinkException('amqp/transport failure'), exc)
              except Exception as exc:  # pylint: disable=broad-except
                  raise_from(LinkException('unexpected failure'), exc)
          else:
              exc = self.__send_exc
              if exc:
                  raise_from(LinkException('Sender unavailable'), exc)
              else:
                  raise LinkException('Sender unavailable (unknown error)')
docs: timeout indicates amount of time to wait for sending thread to be ready. set to larger than zero to wait
          (in seconds, fractional) or None to block.