forked from vishvananda/task
/
example_unstable.py
35 lines (30 loc) · 938 Bytes
/
example_unstable.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import random
import task
@task.ify()
def unstable_action(task_id, progress):
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"