forked from adafruit/circuitpython
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathasyncio_wait_task.py
72 lines (51 loc) · 1.34 KB
/
asyncio_wait_task.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
# Test waiting on a task
try:
import asyncio
except ImportError:
print("SKIP")
raise SystemExit
import time
if hasattr(time, "ticks_ms"):
ticks = time.ticks_ms
ticks_diff = time.ticks_diff
else:
ticks = lambda: int(time.time() * 1000)
ticks_diff = lambda t1, t0: t1 - t0
async def task(t):
print("task", t)
async def delay_print(t, s):
await asyncio.sleep(t)
print(s)
async def task_raise():
print("task_raise")
raise ValueError
async def main():
print("start")
# Wait on a task
t = asyncio.create_task(task(1))
await t
# Wait on a task that's already done
t = asyncio.create_task(task(2))
await asyncio.sleep(0.001)
await t
# Wait again on same task
await t
print("----")
# Create 2 tasks
ts1 = asyncio.create_task(delay_print(0.2, "hello"))
ts2 = asyncio.create_task(delay_print(0.4, "world"))
# Time how long the tasks take to finish, they should execute in parallel
print("start")
t0 = ticks()
await ts1
t1 = ticks()
await ts2
t2 = ticks()
print("took {} {}".format(round(ticks_diff(t1, t0), -2), round(ticks_diff(t2, t1), -2)))
# Wait on a task that raises an exception
t = asyncio.create_task(task_raise())
try:
await t
except ValueError:
print("ValueError")
asyncio.run(main())