def test_max_workload(self): max_workload = 2 workq = WorkQueue(self.worker, max_work_load=max_workload) self.assertFalse(workq.runner().running()) num_iterations = 3 total_work_items = max_workload * num_iterations self.enqueue_entries(workq, total_work_items) self.assertEqual(total_work_items, workq.size()) self.assertEqual(total_work_items, workq.num_enqueues()) # verify that only max_work_load is executed per cycle num_dequeues = 0 num_work_items = total_work_items for i in range(num_iterations): self.assertTrue(workq.runner().running()) gevent.sleep() num_work_items -= max_workload num_dequeues += max_workload self.assertEqual(num_work_items, workq.size()) self.assertEqual(num_dequeues, workq.num_dequeues()) self.assertFalse(workq.runner().running()) self.assertEqual(0, workq.size()) self.assertEqual(total_work_items, workq.num_dequeues())
def test_max_workload(self): max_workload = 2 workq = WorkQueue(self.worker, max_work_load=max_workload) self.assertFalse(workq.runner().running()) num_iterations = 3 total_work_items = max_workload*num_iterations self.enqueue_entries(workq, total_work_items) self.assertEqual(total_work_items, workq.size()) self.assertEqual(total_work_items, workq.num_enqueues()) # verify that only max_work_load is executed per cycle num_dequeues = 0 num_work_items = total_work_items for i in range(num_iterations): self.assertTrue(workq.runner().running()) gevent.sleep() num_work_items -= max_workload num_dequeues += max_workload self.assertEqual(num_work_items, workq.size()) self.assertEqual(num_dequeues, workq.num_dequeues()) self.assertFalse(workq.runner().running()) self.assertEqual(0, workq.size()) self.assertEqual(total_work_items, workq.num_dequeues())
def test_runner(self): # Don't set start_runner # verify runner is executed and worker() is invoked workq = WorkQueue(self.worker) self.assertFalse(workq.runner().running()) self.enqueue_entries(workq, 5) self.assertEqual(5, workq.size()) self.assertEqual(5, workq.num_enqueues()) self.assertTrue(workq.runner().running()) gevent.sleep() self.assertEqual(0, workq.size()) self.assertEqual(5, workq.num_dequeues()) self.assertEqual(5, self.worker_count) # set start_runner to return False # verify that runner doesn't start workq._start_runner = self.start_runner_never self.assertFalse(workq.runner().running()) self.enqueue_entries(workq, 3) self.assertFalse(workq.runner().running()) self.assertEqual(3, workq.size()) self.assertEqual(8, workq.num_enqueues()) gevent.sleep() self.assertEqual(3, workq.size()) self.assertEqual(5, workq.num_dequeues()) self.assertEqual(5, self.worker_count) # set start_runner to return True # verify that runner gets executed workq._start_runner = self.start_runner_always workq.may_be_start_runner() self.assertTrue(workq.runner().running()) gevent.sleep() self.assertEqual(0, workq.size()) self.assertEqual(8, workq.num_dequeues()) self.assertEqual(8, self.worker_count)