def test_exit_results_all_workers(self): """ Test exit results related functions """ comms = WorkerComms(mp.get_context('fork'), 4) comms.init_comms(True, False) # Add a few results. Every worker will always have a return value (even if it's the implicit None). Note that # `get_exit_results` calls `task_done` for worker_id in range(3): comms.init_worker(worker_id) comms.add_exit_results(worker_id) comms.init_worker(3) comms.add_exit_results(None) self.assertListEqual(comms.get_exit_results_all_workers(), [0, 1, 2, None]) # Should be joinable comms.join_results_queues()
def test_exit_results_all_workers_exception_thrown(self): """ Test exit results related functions. When an exception occurred, it should return an empty list """ comms = WorkerComms(mp.get_context('fork'), 3) comms.init_comms(True, False) # Add a few results. for worker_id in range(3): comms.init_worker(worker_id) comms.add_exit_results(worker_id) # Set exception comms.set_exception() # Should return empty list self.assertListEqual(comms.get_exit_results_all_workers(), []) # Drain and join comms._exception_thrown.clear() comms.get_exit_results_all_workers() comms.join_results_queues()
def test_exit_results(self): """ Test exit results related functions """ comms = WorkerComms(mp.get_context('fork'), 3) comms.init_comms(True, False) # Nothing available yet for worker_id in range(3): with self.assertRaises(queue.Empty): comms.get_exit_results(worker_id, timeout=0) # Add a few results. Note that `get_exit_results` calls `task_done` for worker_id in range(3): comms.init_worker(worker_id) comms.add_exit_results(worker_id) comms.add_exit_results('hello world') comms.add_exit_results({'foo': 'bar'}) self.assertListEqual( [comms.get_exit_results(worker_id=0) for _ in range(3)], [0, 'hello world', { 'foo': 'bar' }]) self.assertListEqual( [comms.get_exit_results(worker_id=1) for _ in range(3)], [1, 'hello world', { 'foo': 'bar' }]) self.assertListEqual( [comms.get_exit_results(worker_id=2) for _ in range(3)], [2, 'hello world', { 'foo': 'bar' }]) # Should be joinable comms.join_results_queues()