def acknowledge(self, project, subscription, ack_ids):
service = self.get_conn()<EOL>full_subscription = _format_subscription(project, subscription)<EOL>try:<EOL><INDENT>service.projects().subscriptions().acknowledge(<EOL>subscription=full_subscription, body={'<STR_LIT>': ack_ids}<EOL>).execute(num_retries=self.num_retries)<EOL><DEDENT>except HttpError as e:<EOL><INDENT>raise PubSubException(<EOL>'<STR_LIT>'<EOL>.format(len(ack_ids), full_subscription), e)<EOL><DEDENT>
Pulls up to ``max_messages`` messages from Pub/Sub subscription.

        :param project: the GCP project name or ID in which to create
            the topic
        :type project: str
        :param subscription: the Pub/Sub subscription name to delete; do not
            include the 'projects/{project}/topics/' prefix.
        :type subscription: str
        :param ack_ids: List of ReceivedMessage ackIds from a previous pull
            response
        :type ack_ids: list