def test_manual_retry_task(self): task_id = manual_retry() result = task.run(task_id) self.assertEqual('fail', result) self.assertTrue(task.exists(task_id)) self.assertFalse(task.is_complete(task_id)) result = task.run(task_id) self.assertNotEqual('fail', result) self.assertTrue(task.exists(task_id)) self.assertTrue(task.is_complete(task_id))
def test_object_retry_deleted_object(self): obj = ObjectWithTasks(42) task_id = obj.retry_value() task.run(task_id) self.assertTrue(task.exists(task_id)) self.assertFalse(task.is_complete(task_id)) del obj result = task.run(task_id) self.assertNotEqual('fail', result) self.assertTrue(task.exists(task_id)) self.assertTrue(task.is_complete(task_id)) self.assertEqual(result, 42)
def test_generator_retry_task(self): task_id = generator_retry() rval = task.run(task_id) result = rval.next() self.assertEqual('fail', result) self.assertTrue(task.exists(task_id)) self.assertFalse(task.is_complete(task_id)) rval = task.run(task_id) result = rval.next() self.assertNotEqual('fail', result) self.assertRaises(StopIteration, rval.next) self.assertTrue(task.exists(task_id)) self.assertTrue(task.is_complete(task_id))
def test_complex_task(self): task_id = complex_task(10) rval = task.run(task_id) self.assertTrue(task.exists(task_id)) self.assertFalse(task.is_complete(task_id)) total = 0 for x in xrange(5): total += rval.next() self.assertTrue(task.exists(task_id)) self.assertFalse(task.is_complete(task_id)) rval = task.run(task_id) for x in xrange(5): total += rval.next() self.assertRaises(StopIteration, rval.next) self.assertTrue(task.exists(task_id)) self.assertTrue(task.is_complete(task_id)) task_id = complex_task(10) rval = task.run(task_id) self.assertEqual(total, sum(list(rval)))
def test_rerun_old_tasks(self): mock_datetime.set_time_override() try: task_id1 = nofail() task.run(task_id1) task_id2 = nofail() task.run(task_id2) mock_datetime.advance_time_seconds(60) task_id3 = nofail() task.run(task_id3) self.assertFalse(task.is_complete(task_id1)) task.run(task_id1) timeout = mock_datetime.utcnow() - datetime.timedelta(seconds=30) num = task.timeout(timeout) self.assertEqual(num, 1) task_id = task.claim() self.assertEqual(task_id, task_id2) self.assertEqual(task.claim(), None) task.run(task_id) self.assertTrue(task.is_complete(task_id2)) self.assertFalse(task.is_complete(task_id3)) finally: mock_datetime.clear_time_override()
def test_change_task_name(self): task_id = one_name() task.run(task_id) self.assertTrue(task.exists(task_id)) self.assertTrue(task.is_complete(task_id)) self.assertEqual(task.get(task_id)['task_name'], 'another_name')
def test_finish_task(self): task_id = finish() task.run(task_id) self.assertTrue(task.exists(task_id)) self.assertTrue(task.is_complete(task_id))
import random import eventlet import task @task.ify() def long_action(number, task_id, progress): tries = (progress or 0) + 1 eventlet.sleep(random.randint(1, 10) / 10) if random.randint(1, 10) > 3: print "Action %s Failed" % number raise task.Failure(tries) print "Action %s Succeeded after %s tries" % (number, tries) return tries task.setup_db('sqlite://') # in memory db task_ids = [] for i in xrange(10): task_ids.append(long_action(i)) while not all(task.is_complete(task_id) for task_id in task_ids): task_id = task.claim() if task_id: eventlet.spawn_n(task.run, task_id) eventlet.sleep(0) for task_id in task_ids: print task.get(task_id)['attempts']
yield progress if progress['phase'] < 2: if random.randint(1, 10) > 5: raise task.Failure(progress) progress['phase'] += 1 yield progress if progress['phase'] < 3: if random.randint(1, 10) > 1: raise task.Failure(progress) progress['phase'] += 1 yield progress task.setup_db('sqlite://') # in memory db task_id = unstable_action() def get_results(results): try: for progress in results: print "Phase %s Complete" % progress['phase'] except task.Failure as ex: print "Phase %s Failed" % (ex.progress['phase'] + 1) while not task.is_complete(task_id): results = task.run(task_id) get_results(results) print "Task Completed"
progress = progress or {'phase': 0} if progress['phase'] < 1: progress['phase'] += 1 yield progress if progress['phase'] < 2: if random.randint(1, 10) > 5: raise task.Failure(progress) progress['phase'] += 1 yield progress if progress['phase'] < 3: if random.randint(1, 10) > 1: raise task.Failure(progress) progress['phase'] += 1 yield progress task.setup_db('sqlite://') # in memory db task_id = unstable_action() def get_results(results): try: for progress in results: print "Phase %s Complete" % progress['phase'] except task.Failure as ex: print "Phase %s Failed" % (ex.progress['phase'] + 1) while not task.is_complete(task_id): results = task.run(task_id) get_results(results) print "Task Completed"