-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdemo.py
73 lines (56 loc) · 1.29 KB
/
demo.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
73
#!/usr/bin/env python
from itertools import count
import math
import random
import sys
from threading import Thread
import time
import numpy as np
import sparcli
NAN = float("nan")
running = True
def demo():
jobs = start_producers()
try:
time.sleep(100)
finally:
stop_producers(jobs)
def start_producers():
global running
running = True
jobs = []
for producer in (context_manager, generator):
job = Thread(target=producer, daemon=True)
job.start()
jobs.append(job)
return jobs
def stop_producers(jobs):
global running
running = False
for job in jobs:
job.join()
def context_manager():
with sparcli.ctx() as context:
while running:
y = random.random()
if y < 0.5:
y = NAN
context.record(random=y)
print(f"random: {y:+0.3f} (stdout)")
time.sleep(0.1)
def generator():
for y in sparcli.gen(sinewave(), "sine"):
if not running:
break
print(f"sine: {y:+0.3f} (stderr)", file=sys.stderr)
time.sleep(0.2)
def sinewave():
x = 0
while True:
yield np.sin(x / 10)
x += 1
if __name__ == "__main__":
try:
demo()
except KeyboardInterrupt:
pass