class_docstr: Wraps iterator/generator passed to External Source to enforce
  ES `cycle` policy specified by the user.
  It is a counterpart of _CycleIter/_CycleGenIter wrappers from non parallel mode.
  However due to prefetching in parallel mode `cycle`=raise
  will raise StopIteration in consecutive calls until the new epoch starts
  (i.e. which happens with pipeline.reset call)
class_docstr_tok: ["Wraps","iterator\/generator","passed","to","External","Source","to","enforce","ES","`","cycle","`","policy","specified","by","the","user",".","It","is","a","counterpart","of","_CycleIter\/_CycleGenIter","wrappers","from","non","parallel","mode",".","However","due","to","prefetching","in","parallel","mode","`","cycle","`","=raise","will","raise","StopIteration","in","consecutive","calls","until","the","new","epoch","starts","(","i.e",".","which","happens","with","pipeline.reset","call",")"]
code: def __init__(self, source_desc):
      self.source_desc = source_desc
      self._reset_iter(0)
  
imports: from typing import List, Optional, Tuple
  import threading
  import traceback
  import socket
  from collections import deque
  from multiprocessing import reduction
  from nvidia.dali._utils.external_source_impl import SourceKind, _is_generator_function
  from nvidia.dali._multiproc.shared_batch import SharedBatchWriter, SharedBatchMeta, BufShmChunk, assert_valid_data_type, read_shm_message, write_shm_message
  from nvidia.dali._multiproc.messages import CompletedTask, WorkerArgs, ShmMessageDesc, ScheduledTask
  from nvidia.dali._multiproc.shared_queue import Dispatcher
label_desc: Use image node_id 1 to create a new IterableSource object  with example: obj = IterableSource(source_desc)