def test_process_queue_consumer_join_result(self): with ProcessPoolExecutor(max_workers=1) as executor: manager = Manager() exit_event = manager.Event() work_queue = manager.Queue() output_queue = manager.Queue() def output_to_queue(item): print("output_to_queue:{}".format(item)) try: print("output_to_queue 2:{}".format(item)) output_queue.put(item) except Exception: logging.exception() consumer = ProcessQueueConsumer( output_to_queue, work_queue, exit_event, 0.5, 0.2 ) future = executor.submit(consumer.run) work_queue.put("test") work_queue.join() exit_event.set() output_item = output_queue.get(True) self.assertEqual(output_item, "test") output_queue.task_done()
def test_process_queue_consumer_empty_queue_timeout(self): with ProcessPoolExecutor(max_workers=1) as executor: manager = Manager() exit_event = manager.Event() work_queue = manager.Queue() consumer = ProcessQueueConsumer( lambda item: item, work_queue, exit_event, 0.5 ) future = executor.submit(consumer.run) with self.assertRaises(TimeoutError): future.result(0.5)
def test_process_queue_consumer_insert_none_consumer_finish_no_timeout(self): with ProcessPoolExecutor(max_workers=1) as executor: manager = Manager() exit_event = manager.Event() work_queue = manager.Queue() consumer = ProcessQueueConsumer( lambda item: item, work_queue, exit_event, 1.0 ) future = executor.submit(consumer.run) work_queue.put(None) future.result(2)
def test_process_queue_consumer_timeout_consumer(self): with ProcessPoolExecutor(max_workers=1) as executor: manager = Manager() exit_event = manager.Event() work_queue = manager.Queue() consumer = ProcessQueueConsumer( print_work_item, work_queue, exit_event, 0.5, 0.1 ) future = executor.submit(consumer.run) result = None with self.assertRaises(TimeoutError): result = future.result(0.1) self.assertFalse(result)
def test_process_queue_consumer_assertion_join_no_timeout(self): with ProcessPoolExecutor(max_workers=1) as executor: manager = Manager() exit_event = manager.Event() work_queue = manager.Queue() consumer = ProcessQueueConsumer( lambda item: raise_exception(item), work_queue, exit_event, 0.5 ) future = executor.submit(consumer.run) work_queue.put("raise exception") with self.assertRaises(TestException): print(future.exception()) if future.exception() is not None: raise TestException
def test_process_queue_consumer_raise_exception_sets_exit_event(self): with ProcessPoolExecutor(max_workers=1) as executor: manager = Manager() exit_event = manager.Event() work_queue = manager.Queue() consumer = ProcessQueueConsumer( raise_exception, work_queue, exit_event, 1.0 ) with self.assertRaises(TestException): work_queue.put("cause exception") future = executor.submit(consumer.run) print(future.result()) self.assertTrue(exit_event.is_set())
def test_process_queue_consumer_empty_exit_event_exits(self): with ProcessPoolExecutor(max_workers=1) as executor: manager = Manager() exit_event = manager.Event() work_queue = manager.Queue() consumer = ProcessQueueConsumer( lambda item: item, work_queue, exit_event, 1.0, 0.1 ) exit_event.set() future = executor.submit(consumer.run) future.result()
def test_process_queue_consumer_timeout_join_if_task_not_done(self): with ProcessPoolExecutor(max_workers=1) as executor: manager = Manager() exit_event = manager.Event() work_queue = manager.Queue() # make sure we take time, but don't timeout on our own # the join should cause the timeout consumer = ProcessQueueConsumer( lambda item: time.sleep(0.5), work_queue, exit_event, 2, 1 ) work_queue.put("sleep") future = executor.submit(consumer.run) #print("here") time.sleep(0.1) self.assertTrue(not future.done()) # have the worker finish work_queue.put(None)