def test_task_manager_fail(self): tm = TaskManager( num_threads = 4 ) num_of_tasks = 100 for i in range(num_of_tasks): tm.addTask( i, _doFail, 0.0 ) time.sleep(1) # wait until all tasks are done done_tasks = tm.finishedTasks() self.assertEqual( len(done_tasks), num_of_tasks ) for i, t in enumerate( sorted(done_tasks) ): self.assertEqual( t.task_id, i ) self.assertIsNotNone( t.error )
def test_task_manager(self): tm = TaskManager( 4 ) results = set() num_of_tasks = 8 for i in range(0,num_of_tasks): tm.addTask( i, _doAppend, i, results ) time.sleep(0.5) # wait until all tasks are done done_tasks = tm.finishedTasks() expected_tasks = [ TaskResult( task_id ) for task_id in range(num_of_tasks) ] self.assertEqual( sorted(expected_tasks), expected_tasks ) self.assertEqual( results, set(range(num_of_tasks)) )
def test_task_manager_finish(self): tm = TaskManager( 1 ) results = set() num_tasks = 8 for i in range(num_tasks): tm.addTask( i, _doAppend, i, results, 0.2 ) tm.finish() for i in range(num_tasks, num_tasks * 2): tm.addTask( i, _doAppend, i, results, 0.2 ) self.assertEqual( results, set(range(num_tasks)) ) done_tasks = tm.finishedTasks() expected_tasks = [ TaskResult( task_id ) for task_id in range(num_tasks) ] self.assertEqual( sorted(done_tasks), expected_tasks )
def test_task_manager_stop_on_fail(self): tm = TaskManager( 4, stop_on_fail = True ) results = set() num_tasks = 8 for i in range(3): tm.addTask( i, _doAppend, i, results, 0.3 ) tm.addTask( i + 1, _doFail, 0.1 ) for i in range(i + 2,num_tasks): tm.addTask( i, _doAppend, i, results, 0 ) time.sleep(1) done_tasks = sorted( tm.finishedTasks(), key=lambda t: t.task_id ) self.assertEqual( len(done_tasks), 4 ) expected_tasks = [ TaskResult( task_id, error, result ) \ for task_id, error, result in zip(range(4), [None] * num_tasks, [None] * num_tasks ) ] self.assertEqual( done_tasks[:3], expected_tasks[:3] ) self.assertEqual( done_tasks[3].task_id, 3 ) self.assertIsNotNone( done_tasks[3].error )
def test_task_manager_one_fail(self): tm = TaskManager( 4 ) results = set() num_tasks = 3 tm.addTask( 0, _doAppend, 0, results, 0.3 ) tm.addTask( 1, _doFail, 0.1 ) tm.addTask( 2, _doAppend, 2, results, 0 ) time.sleep(1) done_tasks = sorted( tm.finishedTasks(), key= lambda v: v.task_id ) self.assertEqual( len(done_tasks), num_tasks ) expected_tasks = [ TaskResult( task_id, error, result ) \ for task_id, error, result in zip(range(num_tasks), [None] * num_tasks, [None] * num_tasks ) ] self.assertEqual( done_tasks[0], expected_tasks[0] ) self.assertEqual( done_tasks[1].task_id, 1 ) self.assertIsNotNone( done_tasks[1].error ) self.assertEqual( done_tasks[2], expected_tasks[2] )
def test_task_manager_stop(self): jobs = 4 num_tasks = 8 tm = TaskManager( num_threads = jobs ) results = set() for i in range(num_tasks): tm.addTask( i, _doAppend, i, results, 1 ) time.sleep(0.2) tm.stop() tm.stop() done_tasks = sorted( tm.finishedTasks(), key = lambda result: result.task_id ) expected_tasks = [ TaskResult( task_id ) for task_id in range(jobs) ] self.assertEqual( sorted(done_tasks), expected_tasks ) self.assertEqual( results, set(range(jobs)) )