docs: def _buffered_generation_process(source_gen, buffer_, sentinal):
      """ helper for buffered_generator """
      for data in source_gen:
          buffer_.put(data, block=True)
      # sentinel: signal the end of the iterator
      buffer_.put(sentinal)
      # unfortunately this does not suffice as a signal: if buffer_.get() was
      # called and subsequently the buffer_ is closed, it will block forever.
      buffer_.close()