'Split the key range [key_start, key_end] into a list of ranges.'

def _SplitAndAddRanges(self, thread_pool, batch_size):

    if (self.download_result.direction == key_range_module.KeyRange.ASC):
        key_range = KeyRange(key_start=self.download_result.key_end, key_end=self.key_range.key_end, include_start=False)
    else:
        key_range = KeyRange(key_start=self.key_range.key_start, key_end=self.download_result.key_start, include_end=False)
    if (thread_pool.QueuedItemCount() > (2 * thread_pool.num_threads())):
        ranges = [key_range]
    else:
        ranges = key_range.split_range(batch_size=batch_size)
    for key_range in ranges:
        key_range_item = self.__class__(self.request_manager, self.progress_queue, self.kind, key_range)
        key_range_item.MarkAsRead()
        thread_pool.SubmitItem(key_range_item, block=True)
