class_docstr: Manages several ``tqdm`` progress bars for multiprocess tasks. This class can be used as context manager.
  
  The class starts separate process which creates and updates progress bars. Information to progress process is
  passed via multiprocessing queues. There is a separate queue for every progress bar.
  
  You can use it as context manager:
  
  .. code-block:: python
      with Progress([10, 20], ["progress bar 1", "progress bar 2"], ["parrot", "frog"]) as progress_queues:
          num_processes = 10
          with multiprocessing.Pool(num_processes) as pool:
              data = list(zip(my_data, [progress_queues[0]] * num_processes, [progress_queues[1]] * num_processes))
              pool.starmap(worker_func, data)
  
  Or without context manager:
  
  .. code-block:: python
      progress = Progress([10, 20], ["progress bar 1", "progress bar 2"], ["parrot", "frog"])
      progress_queues = progress.get_queue()
      num_processes = 10
      with multiprocessing.Pool(num_processes) as pool:
          data = list(zip(my_data, [progress_queues[0]] * num_processes, [progress_queues[1]] * num_processes))
          pool.starmap(worker_func, data)
      progress.finish()
  
  In a worker function you will have to put number of processed items into the progress queues. For example:
  
  .. code-block:: python
      def worker_func(my_datum, parrot_progress_queue, frog_progress_queue):
          ...
          for i in range(10):
              parrot_progress_queue.put(1)
              frog_progress_queue.put(2)
  
  Progress bars and progress process are closed when ``finish`` or ``__exit__`` methods are called.
class_docstr_tok: ["Manages","several","``","tqdm","``","progress","bars","for","multiprocess","tasks",".","This","class","can","be","used","as","context","manager",".","The","class","starts","separate","process","which","creates","and","updates","progress","bars",".","Information","to","progress","process","is","passed","via","multiprocessing","queues",".","There","is","a","separate","queue","for","every","progress","bar",".","You","can","use","it","as","context","manager",":","..","code-block",":",":","python","with","Progress","(","[","10",",","20","]",",","[","``","progress","bar","1","''",",","``","progress","bar","2","''","]",",","[","``","parrot","''",",","``","frog","''","]",")","as","progress_queues",":","num_processes","=","10","with","multiprocessing.Pool","(","num_processes",")","as","pool",":","data","=","list","(","zip","(","my_data",",","[","progress_queues","[","0","]","]","*","num_processes",",","[","progress_queues","[","1","]","]","*","num_processes",")",")","pool.starmap","(","worker_func",",","data",")","Or","without","context","manager",":","..","code-block",":",":","python","progress","=","Progress","(","[","10",",","20","]",",","[","``","progress","bar","1","''",",","``","progress","bar","2","''","]",",","[","``","parrot","''",",","``","frog","''","]",")","progress_queues","=","progress.get_queue","(",")","num_processes","=","10","with","multiprocessing.Pool","(","num_processes",")","as","pool",":","data","=","list","(","zip","(","my_data",",","[","progress_queues","[","0","]","]","*","num_processes",",","[","progress_queues","[","1","]","]","*","num_processes",")",")","pool.starmap","(","worker_func",",","data",")","progress.finish","(",")","In","a","worker","function","you","will","have","to","put","number","of","processed","items","into","the","progress","queues",".","For","example",":","..","code-block",":",":","python","def","worker_func","(","my_datum",",","parrot_progress_queue",",","frog_progress_queue",")",":","...","for","i","in","range","(","10",")",":","parrot_progress_queue.put","(","1",")","frog_progress_queue.put","(","2",")","Progress","bars","and","progress","process","are","closed","when","``","finish","``","or","``","__exit__","``","methods","are","called","."]
code: def get_queues(self) -> Tuple[mp.Queue, ...]:
      return self.progress_queues
  
imports: import itertools
  import multiprocessing
  import os
  import pickle
  import tempfile
  from dataclasses import dataclass
  from math import ceil
  from pathlib import Path
  from queue import Empty
  from time import sleep
  from typing import Any, Dict, List, Optional, Set, Tuple, Union
  import numpy
  import torch
  from numpy import ndarray
  from omegaconf import MISSING, DictConfig, OmegaConf
  from torch.nn.utils.rnn import pad_sequence
  from tqdm import tqdm
  from nemo.collections.common.tokenizers.tokenizer_spec import TokenizerSpec
  from nemo.collections.nlp.data.data_utils.data_preprocessing import get_label_stats, get_stats
  from nemo.core.classes import Dataset
  from nemo.core.neural_types import AudioSignal, ChannelType, LabelsType, LengthsType, MaskType, NeuralType
  from nemo.utils import logging
  from nemo.utils.get_rank import is_global_rank_zero
label_desc: Use image node_id 4 for calling the Progress obj's underlying member method code with example usage: obj.get_queues() and returns: self