code: def test_multiple_iterations(self):
      size = 10
      iterations = 5
  
      pool = DummyPool()
      ventilator = ConcurrentVentilator(
          pool.ventilate,
          [{"item": i} for i in range(size)],
          iterations=iterations,
      )
      pool.start(IdentityWorker, ventilator=ventilator)
  
      results = [pool.get_results() for _ in range(size * iterations)]
      self.assertEqual(
          sorted(results), sorted(list(range(size)) * iterations)
      )
      with self.assertRaises(EmptyResultError):
          pool.get_results()
  
      ventilator.stop()
      pool.stop()
      pool.join()
  
imports: import time
  import unittest
  from petastorm.workers_pool import EmptyResultError
  from petastorm.workers_pool.dummy_pool import DummyPool
  from petastorm.workers_pool.process_pool import ProcessPool
  from petastorm.workers_pool.tests.stub_workers import IdentityWorker
  from petastorm.workers_pool.thread_pool import ThreadPool
  from petastorm.workers_pool.ventilator import ConcurrentVentilator
label_desc: Use image node_id 9 for calling the TestWorkersPool obj's underlying member method code with example usage: obj.test_multiple_iterations() without return types