'Given a string key it returns the nodes as a generator that can hold the key.
The generator iterates one time through the ring
starting at the correct position.
if `distinct` is set, then the nodes returned will be unique,
i.e. no virtual copies will be returned.'

def iterate_nodes(self, string_key, distinct=True):

    if (not self.ring):
        (yield (None, None))
    returned_values = set()
    def distinct_filter(value):
        if (str(value) not in returned_values):
            returned_values.add(str(value))
            return value
    pos = self.get_node_pos(string_key)
    for key in self._sorted_keys[pos:]:
        val = distinct_filter(self.ring[key])
        if val:
            (yield val)
    for (i, key) in enumerate(self._sorted_keys):
        if (i < pos):
            val = distinct_filter(self.ring[key])
            if val:
                (yield val)
