def _reading_generator(self, samples, start, stop):
        """Yields one reading at a time.

        Samples are grouped by resource id(already sorted by resource id)
        and then used to create a reading object.

        :param samples: List of samples sorted by resource_id and timestamp.
        :type samples: List
        :param start: Reading start time
        :type start: Datetime
        :param stop: Reading stop time
        :type stop: Datetime
        :yields: Reading objects
        """
        # Yield a reading for each resource/meter pair
        for _, g in itertools.groupby(samples, lambda x: x.resource_id):
            try:
                yield Reading(list(g), start, stop)
            except NoSamplesError:
                continue