예제 #1
0
    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()
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
 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)
예제 #5
0
 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
예제 #6
0
    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())
예제 #7
0
    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()
예제 #8
0
 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)