-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathcouler-examples.py
72 lines (58 loc) · 1.73 KB
/
couler-examples.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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# --------------------------------------------------------------------------------
# couler - coin flip
def random_code():
import random
result = "heads" if random.randint(0, 1) == 0 else "tails"
print(result)
def flip_coin():
return couler.run_script(
image="couler/python:3.6",
source=random_code,
)
def heads():
return couler.run_container(
image="couler/python:3.6",
command=["bash", "-c", 'echo "it was heads"'],
)
def tails():
return couler.run_container(
image="couler/python:3.6",
command=["bash", "-c", 'echo "it was tails"'],
)
result = flip_coin()
couler.when(couler.equal(result, "heads"), lambda: heads())
couler.when(couler.equal(result, "tails"), lambda: tails())
# --------------------------------------------------------------------------------
# couler - DAG
def job(name):
couler.run_container(
image="docker/whalesay:latest",
command=["cowsay"],
args=[name],
step_name=name,
)
# A
# / \
# B C
# /
# D
def linear():
couler.set_dependencies(lambda: job(name="A"), dependencies=None)
couler.set_dependencies(lambda: job(name="B"), dependencies=["A"])
couler.set_dependencies(lambda: job(name="C"), dependencies=["A"])
couler.set_dependencies(lambda: job(name="D"), dependencies=["B"])
# A
# / \
# B C
# \ /
# D
def diamond():
couler.dag(
[
[lambda: job(name="A")],
[lambda: job(name="A"), lambda: job(name="B")], # A -> B
[lambda: job(name="A"), lambda: job(name="C")], # A -> C
[lambda: job(name="B"), lambda: job(name="D")], # B -> D
[lambda: job(name="C"), lambda: job(name="D")], # C -> D
]
)