57 lines
1.3 KiB
Python
57 lines
1.3 KiB
Python
from eca import *
|
|
import random
|
|
|
|
# declare two separate rule sets
|
|
|
|
consumer = Rules()
|
|
producer = Rules()
|
|
|
|
|
|
# default init
|
|
|
|
@event('init')
|
|
def bootstrap(c, e):
|
|
# start a few contexts for the generation of stock quotes
|
|
# (The simple workload here can easily be done in a single context, but we
|
|
# do this in separate contexts to give an example of the feature.)
|
|
spawn_context({'symbol':'GOOG', 'start':500.0, 'delay':1.2}, rules=producer, daemon=True)
|
|
spawn_context({'symbol':'AAPL', 'start':99.0, 'delay':0.9}, rules=producer, daemon=True)
|
|
spawn_context(rules=consumer, daemon=True)
|
|
|
|
@event('end-of-input')
|
|
def done(c,e):
|
|
# terminate if the input is closed
|
|
shutdown()
|
|
|
|
|
|
# producer rules
|
|
|
|
@producer.event('init')
|
|
def start_work(c, e):
|
|
c.symbol = e.data['symbol']
|
|
c.delay = e.data['delay']
|
|
|
|
fire('sample', {
|
|
'previous': e.data['start']
|
|
})
|
|
|
|
@producer.event('sample')
|
|
def work(c, e):
|
|
current = e.data['previous'] + random.uniform(-0.5, 0.5)
|
|
|
|
fire_global('quote', {
|
|
'symbol': c.symbol,
|
|
'value': current
|
|
})
|
|
|
|
fire('sample', {
|
|
'previous': current
|
|
}, delay=c.delay)
|
|
|
|
|
|
# consumer rules
|
|
|
|
@consumer.event('quote')
|
|
def show_quote(c, e):
|
|
print("Quote for {symbol}: {value}".format(**e.data))
|