code: def _pipeline_read_frame(self, *, mpfdp, mpkit):
          
          # check EOF
          if self._flag_e:
              raise EOFError
  
          def _analyse_frame(*, frame, mpkit):
              """Analyse frame."""
              # wait until ready
              while mpkit.current != self._frnum:
                  time.sleep(random.randint(0, datetime.datetime.now().second) // 600)
  
              # analysis and storage
              # print(self._frnum, 'get')
              self._trace = mpkit.trace
              self._reasm = mpkit.reassembly
              self._default_read_frame(frame=frame, mpkit=mpkit)
              # print(self._frnum, 'analysed')
              mpkit.trace = copy.deepcopy(self._trace)
              mpkit.reassembly = copy.deepcopy(self._reasm)
              # print(self._frnum, 'put')
  
          # extract frame
          try:
              # extraction
              frame = Frame(self._ifile, num=self._frnum, proto=self._dlink, layer=self._exlyr,
                            protocol=self._exptl, nanosecond=self._nnsec, mpkit=mpkit, mpfdp=mpfdp)
              # analysis
              _analyse_frame(frame=frame, mpkit=mpkit)
          except EOFError:
              mpkit.eof = True
          finally:
              mpkit.counter -= 1
              self._ifile.close()
docs: Extract frame.