class_docstr: Concatenates all the pipelins
  
  Examples:
      p1 = towhee.pipe.input('url').map('url', 'image', ops.image_decode.cv2())
      p2 = p1.map('image', 'vec1', ops.embedding.timm(model='resnet50'))
      p3 = p1.map('image', 'vec2', ops.embedding.timm(model='resnet50'))
      p1.concat(p2, p3).map(('vec1', 'vec2'), 'vec', ops.numpy_util.merge()).output('vec')
class_docstr_tok: ["Concatenates","all","the","pipelins","Examples",":","p1","=","towhee.pipe.input","(","'url","'",")",".map","(","'url","'",",","'image","'",",","ops.image_decode.cv2","(",")",")","p2","=","p1.map","(","'image","'",",","'vec1","'",",","ops.embedding.timm","(","model='resnet50","'",")",")","p3","=","p1.map","(","'image","'",",","'vec2","'",",","ops.embedding.timm","(","model='resnet50","'",")",")","p1.concat","(","p2",",","p3",")",".map","(","(","'vec1","'",",","'vec2","'",")",",","'vec","'",",","ops.numpy_util.merge","(",")",")",".output","(","'vec","'",")"]
code: def process_step(self):
      self._time_profiler.record(self.uid, Event.queue_in)
      all_data = {}
      for i, q in enumerate(self._in_ques):
          data = q.get_dict(self.cols_every_que[i])
          if data:
              all_data.update(data)
  
      if not all_data:
          self._set_finished()
          return
  
      self._time_profiler.record(self.uid, Event.process_in)
      self._time_profiler.record(self.uid, Event.process_out)
  
      if not self.data_to_next(all_data):
          return
      self._time_profiler.record(self.uid, Event.queue_out)
  
imports: from .node import Node
  from towhee.runtime.time_profiler import Event
label_desc: Use image node_id 2 for calling the Concat obj's underlying member method code with example usage: obj.process_step() without return types