code: def get_data_strict(self):
      self._fill_buffer()
      for dp in self._iter:
          self._send(dp)
          yield self._recv_filter_none()
      self._iter = self.ds.__iter__()  # refresh
  
      # first clear the buffer, then fill
      for k in range(self._buffer_size):
          dp = self._recv_filter_none()
          self._buffer_occupancy -= 1
          if k == self._buffer_size - 1:
              self._fill_buffer()
          yield dp
  
imports: import copy
  import ctypes
  import multiprocessing
  import numpy
  import threading
  import zmq
  from six.moves import queue
  from ..utils.concurrency import StoppableThread, enable_death_signal
  from ..utils.serialize import dumps_once, loads_once
  from .base import DataFlow, DataFlowReentrantGuard, ProxyDataFlow
  from .common import RepeatedData, BatchData
  from .parallel import _bind_guard, _get_pipe_name, _MultiProcessZMQDataFlow, _repeat_iter, _zmq_catch_error
label_desc: Use image node_id 8 for calling the _ParallelMapData obj's underlying member method code with example usage: obj.get_data_strict() without return types