Could you post a) what the output looks like now (sans the logging part) b) what output do you expect In any event, this routine does not look right to me: def consume_queue(queue_name): conn = boto.connect_sqs() q = conn.get_queue(queue_name) m = q.read() while m is not None: yield m q.delete_message(m) logger.debug('message deleted') m = q.read()