code: def receive_messages(source, auth=None, max_batch_size=None, timeout=0, debug=False, **kwargs):
      
      if max_batch_size:
          kwargs['prefetch'] = max_batch_size
      with ReceiveClient(source, auth=auth, debug=debug, **kwargs) as receive_client:
          return receive_client.receive_message_batch(
              max_batch_size=max_batch_size or receive_client._prefetch, timeout=timeout)
docs: Receive a batch of messages from an AMQP endpoint.
  
      :param source: The AMQP source endpoint to receive from.
      :type source: str, bytes or ~uamqp.address.Source
      :param auth: The authentication credentials for the endpoint.
       This should be one of the subclasses of ~uamqp.authentication.AMQPAuth. Currently
       this includes:
          - uamqp.authentication.SASLAnonymous
          - uamqp.authentication.SASLPlain
          - uamqp.authentication.SASTokenAuth
       If no authentication is supplied, SASLAnnoymous will be used by default.
      :type auth: ~uamqp.authentication.common.AMQPAuth
      :param max_batch_size: The maximum number of messages to return in a batch. If the
       receiver receives a smaller number than this, it will not wait to return them so
       the actual number returned can be anything up to this value. If the receiver reaches
       a timeout, an empty list will be returned.
      :param timeout: The timeout in milliseconds after which to return if no messages
       are retrieved. If set to `0` (the default), the receiver will not timeout and
       will continue to wait for messages until interrupted.
      :param debug: Whether to turn on network trace logs. If `True`, trace logs
       will be logged at INFO level. Default is `False`.
      :type debug: bool
      :rtype: list[~uamqp.message.Message]