class_docstr: :class:`ParallelReadConcat`.
  
  Iterable DataPipe that concatenates multiple Iterable DataPipes.
  When used with a DataLoader, assigns a subset of datapipes to each DataLoader worker
  to allow for parallel reading.
  Args:
      datapipes: IterDataPipe instances to read from.
      dp_selector: function that each DataLoader worker would use to determine the subset of datapipes
      to read from.
  Example::
  
      datapipes = [
          criteo_terabyte(
              (f"/home/local/datasets/criteo/shard_{idx}.tsv",),
          )
          .batch(100)
          .collate()
          for idx in range(4)
      ]
      dataloader = DataLoader(
          ParallelReadConcat(*datapipes), num_workers=4, batch_size=None
      )
class_docstr_tok: [":","class",":","`","ParallelReadConcat","`",".","Iterable","DataPipe","that","concatenates","multiple","Iterable","DataPipes",".","When","used","with","a","DataLoader",",","assigns","a","subset","of","datapipes","to","each","DataLoader","worker","to","allow","for","parallel","reading",".","Args",":","datapipes",":","IterDataPipe","instances","to","read","from",".","dp_selector",":","function","that","each","DataLoader","worker","would","use","to","determine","the","subset","of","datapipes","to","read","from",".","Example",":",":","datapipes","=","[","criteo_terabyte","(","(","f","''","\/home\/local\/datasets\/criteo\/shard_","{","idx","}",".tsv","''",",",")",",",")",".batch","(","100",")",".collate","(",")","for","idx","in","range","(","4",")","]","dataloader","=","DataLoader","(","ParallelReadConcat","(","*","datapipes",")",",","num_workers=4",",","batch_size=None",")"]
code: def __iter__(self) -> Iterator[Any]:
      selected_dps = self.dp_selector(self.datapipes)
      for dp in selected_dps:
          for data in dp:
              yield data
  
imports: import csv
  import math
  import random
  from dataclasses import dataclass
  from functools import partial
  from io import IOBase
  from typing import Any, Callable, Iterable, Iterator, List, Sequence, Tuple, TypeVar
  import torch
  from iopath.common.file_io import PathManager, PathManagerFactory
  from torch.utils.data import functional_datapipe, get_worker_info, IterDataPipe
  from torchrec.sparse.jagged_tensor import KeyedJaggedTensor
  from torchrec.streamable import Pipelineable
label_desc: Use image node_id 2 for calling the ParallelReadConcat obj's underlying member method code with example usage: obj.__iter__() without return types