code: def test_speedup(self):
      x = np.random.random((40, 4))
      y = np.random.random((40, 2))
  
      no_speedup_py_dataset = ExamplePyDataset(
          x,
          y,
          batch_size=4,
          delay=0.5,
      )
      adapter = py_dataset_adapter.PyDatasetAdapter(
          no_speedup_py_dataset, shuffle=False
      )
      gen = adapter.get_numpy_iterator()
      t0 = time.time()
      for batch in gen:
          pass
      no_speedup_time = time.time() - t0
  
      speedup_py_dataset = ExamplePyDataset(
          x,
          y,
          batch_size=4,
          workers=4,
          # TODO: the github actions runner may have performance issue with
          # multiprocessing
          # use_multiprocessing=True,
          max_queue_size=8,
          delay=0.5,
      )
      adapter = py_dataset_adapter.PyDatasetAdapter(
          speedup_py_dataset, shuffle=False
      )
      gen = adapter.get_numpy_iterator()
      t0 = time.time()
      for batch in gen:
          pass
      speedup_time = time.time() - t0
  
      self.assertLess(speedup_time, no_speedup_time)
  
imports: import math
  import time
  import numpy
  import tensorflow
  from absl.testing import parameterized
  from keras import testing
  from keras.trainers.data_adapters import py_dataset_adapter
  from keras.utils.rng_utils import set_random_seed
label_desc: Use image node_id 2 for calling the PyDatasetAdapterTest obj's underlying member method code with example usage: obj.test_speedup() without return types